如果多维数组的一列的所有值都是_numeric,则最快返回TRUE

艾玛

有没有更快的方法来检查nullphp多维数组的一列中数字(不是的存在(例如number9)?

尝试:

if statement下面似乎是工作好。

$arr=Array(
    [0] => Array
        (
            [date] => 2019-01-16
            [number1] => 20.4
            [number2] => 20.54
            [number3] => 19.71
            [number4] => 19.73
            [number5] => 70849266
            [number6] => 70849266
            [number7] => -0.65
            [number8] => -3.189
            [number9] => 20.0902
            [string1] => Jan 16
            [number10] => 0.047796070100903
        )

    .
    .
    .

    [21] => Array
        (
            [date] => 2019-01-17
            [number1 => 19.49
            [number2] => 20.51
            [number3] => 19.02
            [number4] => 20.25
            [number5] => 85018421
            [number6] => 85018421
            [number7] => 0.52
            [number8] => 2.636
            [number9] => 19.7988
            [string1] => Jan 17
            [number10] => 0.075411577270313
        )

);


function isNumeric($var){
  if (is_numeric($var)){
    return true;
  } else {
    return false;
  }
}


if((array_walk(array_column($arr, "number8"), 'isNumeric'))!=1)
达曼

这是我的想法。
首先是仅过滤数组中的仅数字值,然后将其与原始值进行比较:

function with_array_filter($arr) {
    return $arr == array_filter($arr, 'is_numeric');
}

第二个示例使用强制转换为浮点数然后返回字符串的方式,请记住,这对于很大的数字来说并不准确,但是似乎是最快的(如果您真的很在意):

function is_numeric_array_with_cast($arr) {
    foreach ($arr as $b) {
        if ($b != (string)(float)$b) {
            return false;
        }
    }
    return true;
}

但是,可能最简单的解决方案是foreach将数组放在函数内部并尽早返回:

function is_numeric_array_with_func($arr) {
    foreach ($arr as $b) {
        if (!is_numeric($b)) {
            return false;
        }
    }
    return true;
}

在PHP 7.2上以20个元素组成的数组进行了100000次迭代的基准测试:

$falseArray = [
    '1',
    2.5,
    -10,
    32,
    11.0,
    2.5,
    100101221,
    345,
    -10,
    '-10',
    '+10',
    '10',
    12,
    PHP_INT_MAX,
    PHP_INT_MAX + 1.4e5,
    '-10',
    null,
    'a',
    '5',
    5
];

Matt Fryer
Time: 4.8473789691925

is_numeric_array_with_func
Time:  4.0416791439056

is_numeric_array_with_cast
Time:  3.2953300476074

with_array_filter
Time:  3.99729180336

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果所有值都是特定值,则删除一列

在Postgresql中,分组后,如果列的任何值为false,则返回false。如果所有值都是true / false,则分别返回true / false

如何有条件地回显多维数组的一列中的一个或所有值?

当所有值都是日期时,将一列中的 NA 替换为另一列中的值

Excel如果一列包含唯一值,而另一列包含一个真值,则返回这些唯一值的所有真值

合并多维数组,并对在另一列中具有相同值的列值求和

在标准SQL中,如何选择行,以便对于一列中的每个唯一值,另一列中的所有值都是指定值?

在一行中查找所有绑定的最大值,如果列包含最大值,则返回true或false

检查一列中的值是否为true,则左侧的所有值也为true

如果某个级别的所有观察值都具有相同的值,我如何改变一列以返回一个值?

MySQL返回最大值;如果一列没有值,则返回null

如果来自一列的值与来自具有值数组的列匹配,则变异新列

如果数组中的所有对象在属性中都具有值,则返回true

如果一列中的值超过某个值,则删除 2 列中的所有行

如果用户列表中的所有元素都是列表,则返回True

如果第一列与另一个工作表上的值匹配,如何返回一行中的所有单元格

如果某一列包含特定值,则选择具有相同ID的所有行

如何返回二维数组中除一列以外的所有列?

MySQL:如果所有联合表行的值都为true,则返回一行

如果所有值都等于1,则在熊猫中放入一列?

如果所有值都在同一列中,如何从 csv 文件中读取数据?

在R数据框中创建布尔列,如果另一列的值逐行更改,则返回true

如果此列中的所有值都是特定值,则从数据框中删除该列

为2D数组的第一列的所有第二列插入值

如果所有值都相同,Powershell仅返回TRUE

如果每个项目在Arraylist中都是唯一的,则返回true

检查值是否具有重复项,而另一列在php的多维数组中是否不同?

布尔索引,如果行等于另一列中所有唯一值的值 - 熊猫

如果所有值都是特定字符串,则删除pandas数据框中的列