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

时间:2012-05-02 16:44:16

标签: 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.";
    }
}

?>



我没有成功使用这种方法。有任何想法吗?谢谢你提前!

7 个答案:

答案 0 :(得分:6)

首先,您的循环逻辑是错误的:您应该在达到判决之前处理所有数组中的项目。最短(但不是最明显)的方法是使用

$allNumbers = $array == array_filter($array, 'is_numeric');

这是有效的,因为array_filter保留了密钥,comparing arrays with ==检查了元素计数,键,值(这里的值是原语,因此可以进行简单的比较)。< / p>

更普通的解决方案是

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

// now $allNumbers is either true or false

关于过滤功能:如果您只想允许字符09,则需要使用ctype_digit,但需要注意的是这不允许使用减号前面。

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

gettype在这种情况下不起作用,因为您的数组包含数字字符串,而不是数字。

答案 1 :(得分: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.";
}

答案 2 :(得分:3)

您可以使用array_map链接array_product以获得单行表达式:

if (array_product(array_map('is_numeric', $string_detecting_array))) {
    echo "all values are numeric\n";
} else {
    echo "not all keys are numeric\n";
}

答案 3 :(得分:1)

答案 4 :(得分:1)

您可以使用:

$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.';
}

答案 5 :(得分:0)

你必须设置一个标志并查看所有项目。

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

答案 6 :(得分:0)

您可以创建自己的批量测试功能。它可能是您的实用程序类的静态函数!

/**
 * @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;
}