检查数组中的所有值是否为数字的最快方法是什么?

时间:2010-12-13 07:56:14

标签: php arrays

我必须检查大数组,看看它们是否100%填充数值。 我想到的唯一方法是foreach,然后是每个值的is_numeric,但这是最快的方法吗?

7 个答案:

答案 0 :(得分:18)

假设你的数组是一维的,只是由整数组成:

return ctype_digit(implode('',$array));

答案 1 :(得分:4)

array_map("is_numeric", array(1,2,"3","hello"))

Array ( [0] => 1 [1] => 1 [2] => 1 [3] => )

答案 2 :(得分:4)

使用is_numeric过滤数组。如果结果的大小与原始大小相同,则所有项都是数字:

$array = array( 1, '2', '45' );
if ( count( $array ) === count( array_filter( $array, 'is_numeric' ) ) ) {
    // all numeric
}

答案 3 :(得分:0)

我知道这个问题比较老,但是我在我的当前项目中使用Andy的方法,发现它是最可靠,用途最广泛的解决方案,因为它适用于所有数值(负,正和十进制)一样。

这是我写的平均值函数:

$array = [-10,1,2.1,3,4,5.5,6]; // sample numbers
function array_avg($arr) {
    if (is_array($arr) && count($arr) === count(array_filter($arr, 'is_numeric'))) {
        return array_sum($arr)/count($arr);
    } else {
        throw new Exception("non-numerical data detected");
    }
}
echo array_avg($array); // returns 1.6571428571429

答案 4 :(得分:-1)

这个小功能对我来说很好用

function IsNumericarr($arr){
    if(!is_array($arr)){
        return false;
    }
    else{
        foreach($arr as $ar){
            if(!is_numeric($ar)){
                return false;
                exit;
            }
        }
        return true;
    }
}

需要循环

答案 5 :(得分:-1)

if(array_reduce($array, function($c, $v){return $c & (int)is_numeric($v);}, 1))

答案 6 :(得分:-2)

最快的方法可能是假设它们都是数字并继续您的操作。如果您的操作稍后失败,那么您知道某些东西不是数字。但如果它们都是数字......你不能比O(0)快得多!

相关问题