难以检查数组中的元素是否为整数PHP类型

Dan*_*nko 4 php arrays validation isnumeric


我试图检测一个或多个变量是否包含数字.我尝试过几种不同的方法,但我还没有完全成功.

这是我尝试过的.

<?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.";
    }
}

?>
Run Code Online (Sandbox Code Playgroud)



我没有成功使用这种方法.有任何想法吗?先感谢您!

Jon*_*Jon 7

首先,你的循环逻辑是错误的:你应该在达成判决之前处理数组中的所有项目.最短(但不是最明显)的方法是这样做

$allNumbers = $array == array_filter($array, 'is_numeric');
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为array_filter保留键并将数组与==检查元素计数,键值进行比较(这里的值是基元,因此可以进行简单的比较).

一个更普通的解决方案

$allNumbers = true;
foreach ($array as $item) {
    if (!is_numeric_($item)) {
        $allNumbers = false;
        break;
    }
}

// now $allNumbers is either true or false
Run Code Online (Sandbox Code Playgroud)

关于过滤功能:如果你只想让人物09,你要使用ctype_digit,需要提醒的是,这将不允许在前面的负号.

is_numeric 将允许标志,但它也将允许浮点数和十六进制.

gettype在这种情况下将无法工作,因为您的数组包含数字字符串,而不是数字.


bos*_*ter 5

gettype如果要明确知道变量是否为数字,则可以使用.使用is_numeric不会尊重类型.

如果您打算使用is_numeric但想知道是否所有元素都是,请按以下步骤操作:

$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.";
}
Run Code Online (Sandbox Code Playgroud)