Php 检查数组中的所有值是否为数字的最快方法是什么?
我必须检查大数组,看看它们是否100%充满了数值。Php 检查数组中的所有值是否为数字的最快方法是什么?,php,arrays,Php,Arrays,我必须检查大数组,看看它们是否100%充满了数值。 我想到的唯一方法是foreach,然后每个值都是数字,但这是最快的方法吗?假设数组是一维的,并且只是由整数组成: return ctype_digit(implode('',$array)); 最快的方法可能是假设它们都是数字,然后继续操作。如果您的操作后来失败,那么您知道有些东西不是数字。但如果它们都是数字。。。你不可能比O(0)快得多 这个小函数对我来说很好 function IsNumericarr($arr){ if(!is_
我想到的唯一方法是foreach,然后每个值都是数字,但这是最快的方法吗?假设数组是一维的,并且只是由整数组成:
return ctype_digit(implode('',$array));
最快的方法可能是假设它们都是数字,然后继续操作。如果您的操作后来失败,那么您知道有些东西不是数字。但如果它们都是数字。。。你不可能比O(0)快得多 这个小函数对我来说很好
function IsNumericarr($arr){
if(!is_array($arr)){
return false;
}
else{
foreach($arr as $ar){
if(!is_numeric($ar)){
return false;
exit;
}
}
return true;
}
}
需要循环使用is\u数字筛选数组。如果结果的大小与原始结果相同,则所有项目都是数字:
array_map("is_numeric", array(1,2,"3","hello"))
Array ( [0] => 1 [1] => 1 [2] => 1 [3] => )
$array = array( 1, '2', '45' );
if ( count( $array ) === count( array_filter( $array, 'is_numeric' ) ) ) {
// all numeric
}
我知道这个问题很老了,但我在我当前的一个项目中使用了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
此问题的任何解决方案都将在数组值上循环。您是否需要在代码或函数中完成这项工作是另一个问题,但在这两种情况下都有一个循环。所以我想性能应该差不多,不管你做什么。在值进入数组之前验证它们怎么样?这并不是那么简单,因为值以随机方式进入和离开数组,其中一些可以为null或false或“”,然后我必须用它们进行计算,如果数组中的某些数据不是数字,则这些计算的结果必须为null。如果必须撤消我的投票,
false
和null
值,它们返回false作为is\u numeric()
的值在这里内爆为空字符串,转义ctype\u digit()
@BoltClock:OP确保数组是空的“100%充满数值”我认为内爆操作在时间上相当昂贵。@用户393087:如果你能支持你关于内爆昂贵的说法,你的“我认为”评论没有依据。真正的程序员说“我检查过了”“。这就是为什么基准测试是一门科学。但是一些非数字值会因为弱键入/自动播放而漏掉。”。该假设不安全。此答案因其长度和内容而自动标记为低质量。一个解释将帮助这个答案变得更像堆栈溢出答案。
$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