[英]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.