Snažím sa zistiť, či jedna alebo viac premenných obsahuje čísla. Vyskúšal som niekoľko rôznych metód, ale nebol som úplne úspešný.
Tu je to, čo som skúšal.
<?php
$one = "1";
$two = "2";
$a1 = "3";
$a2 = "4";
$a3 = "5";
$string_detecting_array = array();
array_push($string_detecting_array, $one,$two,$a1,$a2,$a3);
foreach ($string_detecting_array as $key) {
if (is_numeric($key)) {
echo "Yes all elements in array are type integer.";
}
else {
echo "Not all elements in array were type integer.";
}
}
?>
Používanie tejto metódy sa mi nepodarilo. Máte nejaké nápady? Ďakujem vopred!
odpovede:
5 pre odpoveď č. 1Môžeš použiť gettype
ak chcete výslovne vedieť, či je premenná číslo. Použitím is_numeric
nebude rešpektovať typy.
Ak máte v úmysle použiť is_numeric
ale chcem vedieť, či všetko prvkov, potom postupujte takto:
$all_numeric = true;
foreach ($string_detecting_array as $key) {
if (!(is_numeric($key))) {
$all_numeric = false;
break;
}
}
if ($all_numeric) {
echo "Yes all elements in array are type integer.";
}
else {
echo "Not all elements in array were type integer.";
}
6 pre odpoveď č. 2
Po prvé, vaša logika slučky je nesprávna: mali by ste spracovať všetko položky v poli pred dosiahnutím verdiktu. Najkratší (aj keď nie úplne zrejmý) spôsob, ako to dosiahnuť, je
$allNumbers = $array == array_filter($array, "is_numeric");
To funguje preto, lebo array_filter
zachováva kľúče a porovnávanie polí s ==
kontroluje počty prvkov, kľúče, a hodnoty (a hodnoty tu sú primitívne, takže ich možno triviálne porovnať).
Bolo by všednejšie riešenie
$allNumbers = true;
foreach ($array as $item) {
if (!is_numeric_($item)) {
$allNumbers = false;
break;
}
}
// now $allNumbers is either true or false
Pokiaľ ide o funkciu filtra: ak chcete povoliť iba znaky 0
na 9
, ktoré chcete pouľi » ctype_digit
, s výhradou, že to neumožňuje znamienko mínus vpredu.
is_numeric
umožní znamienka, ale umožní aj čísla s pohyblivou rádovou čiarkou a hexadecimálne čísla.
gettype
nebude v tomto prípade fungovať, pretože vaše pole obsahuje číselné reťazce, nie čísla.
3 pre odpoveď № 3
Môžete reťaziť array_map
s array_product
získať výraz jedného riadku:
if (array_product(array_map("is_numeric", $string_detecting_array))) {
echo "all values are numericn";
} else {
echo "not all keys are numericn";
}
1 pre odpoveď č. 4
použitie gettype()
http://php.net/manual/en/function.gettype.php
1 pre odpoveď č. 5
Môžete použiť toto:
$set = array(1,2,"a","a1","1");
if(in_array(false, array_map(function($v){return is_numeric($v);}, $set)))
{
echo "Not all elements in array were type integer.";
}
else
{
echo "Yes all elements in array are type integer.";
}
0 pre odpoveď č. 6
Musíte nastaviť vlajku a pozrieť sa na všetky položky.
$isNumeric = true;
foreach ($string_detecting_array as $key) {
if (!is_numeric($key)) {
$isNumeric = false;
}
}
if ($isNumeric) {
echo "Yes all elements in array are type integer.";
}
else {
echo "Not all elements in array were type integer.";
}
0 pre odpoveď č. 7
Môžete si vytvoriť vlastnú funkciu testovania dávky. Môže to byť statická funkcia vo vašej triede nástrojov!
/**
* @param array $array
* @return bool
*/
public static function is_all_numeric(array $array){
foreach($array as $item){
if(!is_numeric($item)) return false;
}
return true;
}