簡體   English   中英

檢查數組中的所有值是否都是數字的最快方法是什么?

[英]What is the Quickest Way to Check If All Values in an Array Are Numeric?

我必須檢查大數組以查看它們是否 100% 填充了數值。 我想到的唯一方法是 foreach 然后是每個值的 is_numeric,但這是最快的方法嗎?

假設您的數組是一維的並且僅由整數組成:

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

使用 is_numeric 過濾數組。 如果結果的大小與原始大小相同,則所有項目都是數字:

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

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

我知道這個問題相當古老,但我在我當前的一個項目中使用了安迪的方法,並發現它是最可靠和通用的解決方案,因為它適用於所有數值,負數、正數和小數。

這是我寫的平均值函數:

$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

這個小功能對我來說很好用

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

需要循環

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

最快的方法可能是假設它們都是數字並繼續您的操作。 如果您的操作稍后失敗,那么您就知道某些東西不是數字。 但如果它們實際上都是數字......你不能比 O(0) 快得多!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM