/ / Obtiažnosť kontroly, či prvky v poli sú typu celé číslo PHP - php, polia, validácia, izumerické

Obtiažnosť pri kontrole, či prvky v poli sú typu integer PHP - php, polia, validácia, isnumeric


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ď č. 1

Môž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;
}