Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在检查所有数组元素是否为相同类型时的性能_Php_Arrays_Performance_Micro Optimization - Fatal编程技术网

PHP在检查所有数组元素是否为相同类型时的性能

PHP在检查所有数组元素是否为相同类型时的性能,php,arrays,performance,micro-optimization,Php,Arrays,Performance,Micro Optimization,我偶然发现了用PHP检查数组中的所有元素是否都是相同类型的最快方法。在浏览了StackOverflow的不同方法之后,我决定检查哪种方法更快。我已经测试了不同的方法(见下面我的自我回答) 希望这有帮助 编辑 TEST isArrayOf_1: result = fail, t = 0.13473296165466 TEST isArrayOf_2: result = fail, t = 0.22269797325134 TEST isArrayOf_3: result = fail, t = 0

我偶然发现了用PHP检查数组中的所有元素是否都是相同类型的最快方法。在浏览了StackOverflow的不同方法之后,我决定检查哪种方法更快。我已经测试了不同的方法(见下面我的自我回答)

希望这有帮助

编辑

TEST isArrayOf_1: result = fail, t = 0.13473296165466
TEST isArrayOf_2: result = fail, t = 0.22269797325134
TEST isArrayOf_3: result = fail, t = 0.074767112731934
TEST isArrayOf_4: result = fail, t = 0.91770792007446

TEST isArrayOf_1: result = fail, t = 0.017352104187012
TEST isArrayOf_2: result = fail, t = 0.015971899032593
TEST isArrayOf_3: result = fail, t = 0.058960914611816
TEST isArrayOf_4: result = fail, t = 0.75518012046814
在阅读了什么是“微观优化”之后,似乎这是一个微观优化问题。我以前没听说过这个词,因为,令我惊讶的是,只要代码可读性好,我总是以“微优化”的方式编写代码。也许我在嵌入式世界的数据处理编程的根已经将我的思想转向某种代码微优化器:D

PHP代码:

//Approach 1: pass array and the name of a PHP type
function isArrayOf_1($v, $phptype) {
    if (is_array($v)) {
        foreach ($v as $elem) if (gettype($elem) != $phptype) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 2: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_2($v, $testf) {
    if (is_array($v)) {
        foreach ($v as $elem) if (!call_user_func($testf, $elem)) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 3: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_3($v, $testf) {    
    if (is_array($v)) {
        if (count($v) != count(array_filter($v, $testf))) return FALSE;
        return TRUE;
    }
    return FALSE;
}


//Approach 4: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_4($v, $testf) {    
    if (is_array($v)) {            
        return array_reduce (
            $v, 
            function($return, $value) use ($testf) {
                return $return && $testf($value);
            },
            true
        );
    }
    return FALSE;
}

//Number of tested functions
$TEST_FUNCTIONS = 4;

//Test data
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end

//Tests
$tests = array(
    array('integer', 'is_int', 'is_int'), //Successful check test
    array('boolean', 'is_bool', 'is_bool') //Wrong check test
);

foreach ($tests as $test) {    
    for ($i = 1; $i <= $TEST_FUNCTIONS; $i++) {
        $start = microtime(true);
        $res =  call_user_func("isArrayOf_$i", $v, $test[$i-1]);
        $t = microtime(true) - $start;
        echo "TEST isArrayOf_$i: result = ".($res?'success':'fail').", t = $t<br/>";
    }
    echo "<br/>";
}
我们可以看到,如果在数组的后期发现错误的值,那么方法3的性能最好。但是,如果错误的值在数组的早期出现,那么接近1和2是赢家。我们还看到,在这两种情况下,方法3的行为相似,而其他两种方法的执行时间则不同。最糟糕的方法似乎是#4。。。你知道为什么吗

因此,IMHO,我会选择方法3来检查数组中的所有元素是否都是给定类型。

PHP代码:

//Approach 1: pass array and the name of a PHP type
function isArrayOf_1($v, $phptype) {
    if (is_array($v)) {
        foreach ($v as $elem) if (gettype($elem) != $phptype) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 2: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_2($v, $testf) {
    if (is_array($v)) {
        foreach ($v as $elem) if (!call_user_func($testf, $elem)) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 3: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_3($v, $testf) {    
    if (is_array($v)) {
        if (count($v) != count(array_filter($v, $testf))) return FALSE;
        return TRUE;
    }
    return FALSE;
}


//Approach 4: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_4($v, $testf) {    
    if (is_array($v)) {            
        return array_reduce (
            $v, 
            function($return, $value) use ($testf) {
                return $return && $testf($value);
            },
            true
        );
    }
    return FALSE;
}

//Number of tested functions
$TEST_FUNCTIONS = 4;

//Test data
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end

//Tests
$tests = array(
    array('integer', 'is_int', 'is_int'), //Successful check test
    array('boolean', 'is_bool', 'is_bool') //Wrong check test
);

foreach ($tests as $test) {    
    for ($i = 1; $i <= $TEST_FUNCTIONS; $i++) {
        $start = microtime(true);
        $res =  call_user_func("isArrayOf_$i", $v, $test[$i-1]);
        $t = microtime(true) - $start;
        echo "TEST isArrayOf_$i: result = ".($res?'success':'fail').", t = $t<br/>";
    }
    echo "<br/>";
}
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end
$testf = 'is_int';
$result = array_reduce (
    $v, 
    function($return, $value) use ($testf) {
        return $return && $testf($value);
    },
    true
);

var_dump($result);
我们可以看到,如果在数组的后期发现错误的值,那么方法3的性能最好。但是,如果错误的值在数组的早期出现,那么接近1和2是赢家。我们还看到,在这两种情况下,方法3的行为相似,而其他两种方法的执行时间则不同。最糟糕的方法似乎是#4。。。你知道为什么吗

因此,IMHO,我会选择方法3来检查数组中的所有元素是否都是给定类型。

PHP代码:

//Approach 1: pass array and the name of a PHP type
function isArrayOf_1($v, $phptype) {
    if (is_array($v)) {
        foreach ($v as $elem) if (gettype($elem) != $phptype) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 2: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_2($v, $testf) {
    if (is_array($v)) {
        foreach ($v as $elem) if (!call_user_func($testf, $elem)) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 3: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_3($v, $testf) {    
    if (is_array($v)) {
        if (count($v) != count(array_filter($v, $testf))) return FALSE;
        return TRUE;
    }
    return FALSE;
}


//Approach 4: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_4($v, $testf) {    
    if (is_array($v)) {            
        return array_reduce (
            $v, 
            function($return, $value) use ($testf) {
                return $return && $testf($value);
            },
            true
        );
    }
    return FALSE;
}

//Number of tested functions
$TEST_FUNCTIONS = 4;

//Test data
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end

//Tests
$tests = array(
    array('integer', 'is_int', 'is_int'), //Successful check test
    array('boolean', 'is_bool', 'is_bool') //Wrong check test
);

foreach ($tests as $test) {    
    for ($i = 1; $i <= $TEST_FUNCTIONS; $i++) {
        $start = microtime(true);
        $res =  call_user_func("isArrayOf_$i", $v, $test[$i-1]);
        $t = microtime(true) - $start;
        echo "TEST isArrayOf_$i: result = ".($res?'success':'fail').", t = $t<br/>";
    }
    echo "<br/>";
}
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end
$testf = 'is_int';
$result = array_reduce (
    $v, 
    function($return, $value) use ($testf) {
        return $return && $testf($value);
    },
    true
);

var_dump($result);
我们可以看到,如果在数组的后期发现错误的值,那么方法3的性能最好。但是,如果错误的值在数组的早期出现,那么接近1和2是赢家。我们还看到,在这两种情况下,方法3的行为相似,而其他两种方法的执行时间则不同。最糟糕的方法似乎是#4。。。你知道为什么吗

因此,IMHO,我会选择方法3来检查数组中的所有元素是否都是给定类型。

PHP代码:

//Approach 1: pass array and the name of a PHP type
function isArrayOf_1($v, $phptype) {
    if (is_array($v)) {
        foreach ($v as $elem) if (gettype($elem) != $phptype) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 2: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_2($v, $testf) {
    if (is_array($v)) {
        foreach ($v as $elem) if (!call_user_func($testf, $elem)) return FALSE;
        return TRUE;
    }
    return FALSE;
}

//Approach 3: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_3($v, $testf) {    
    if (is_array($v)) {
        if (count($v) != count(array_filter($v, $testf))) return FALSE;
        return TRUE;
    }
    return FALSE;
}


//Approach 4: pass array and the name of a PHP type-check function (e.g.: is_int())
function isArrayOf_4($v, $testf) {    
    if (is_array($v)) {            
        return array_reduce (
            $v, 
            function($return, $value) use ($testf) {
                return $return && $testf($value);
            },
            true
        );
    }
    return FALSE;
}

//Number of tested functions
$TEST_FUNCTIONS = 4;

//Test data
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end

//Tests
$tests = array(
    array('integer', 'is_int', 'is_int'), //Successful check test
    array('boolean', 'is_bool', 'is_bool') //Wrong check test
);

foreach ($tests as $test) {    
    for ($i = 1; $i <= $TEST_FUNCTIONS; $i++) {
        $start = microtime(true);
        $res =  call_user_func("isArrayOf_$i", $v, $test[$i-1]);
        $t = microtime(true) - $start;
        echo "TEST isArrayOf_$i: result = ".($res?'success':'fail').", t = $t<br/>";
    }
    echo "<br/>";
}
$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end
$testf = 'is_int';
$result = array_reduce (
    $v, 
    function($return, $value) use ($testf) {
        return $return && $testf($value);
    },
    true
);

var_dump($result);
我们可以看到,如果在数组的后期发现错误的值,那么方法3的性能最好。但是,如果错误的值在数组的早期出现,那么接近1和2是赢家。我们还看到,在这两种情况下,方法3的行为相似,而其他两种方法的执行时间则不同。最糟糕的方法似乎是#4。。。你知道为什么吗

所以,IMHO,我会选择方法3来检查数组中的所有元素是否都是给定类型

$v = range(1, 100000);
$v[]=false; //Put a non-integer element at the end
$testf = 'is_int';
$result = array_reduce (
    $v, 
    function($return, $value) use ($testf) {
        return $return && $testf($value);
    },
    true
);

var_dump($result);
编辑

TEST isArrayOf_1: result = fail, t = 0.13473296165466
TEST isArrayOf_2: result = fail, t = 0.22269797325134
TEST isArrayOf_3: result = fail, t = 0.074767112731934
TEST isArrayOf_4: result = fail, t = 0.91770792007446

TEST isArrayOf_1: result = fail, t = 0.017352104187012
TEST isArrayOf_2: result = fail, t = 0.015971899032593
TEST isArrayOf_3: result = fail, t = 0.058960914611816
TEST isArrayOf_4: result = fail, t = 0.75518012046814
在我的笔记本电脑上的结果:

PHP 5.4.7

TEST isArrayOf_1: result = fail, t = 0.033294200897217
TEST isArrayOf_2: result = fail, t = 0.10196995735168
TEST isArrayOf_3: result = fail, t = 0.052531957626343
TEST isArrayOf_4: result = fail, t = 0.079360961914062

TEST isArrayOf_1: result = fail, t = 0.0085389614105225
TEST isArrayOf_2: result = fail, t = 0.0083901882171631
TEST isArrayOf_3: result = fail, t = 0.044848918914795
TEST isArrayOf_4: result = fail, t = 0.035619020462036
PHP 5.4.21

TEST isArrayOf_1: result = fail, t = 0.032476902008057
TEST isArrayOf_2: result = fail, t = 0.098520040512085
TEST isArrayOf_3: result = fail, t = 0.052137136459351
TEST isArrayOf_4: result = fail, t = 0.074975967407227

TEST isArrayOf_1: result = fail, t = 0.0085029602050781
TEST isArrayOf_2: result = fail, t = 0.0084490776062012
TEST isArrayOf_3: result = fail, t = 0.044224977493286
TEST isArrayOf_4: result = fail, t = 0.035413026809692
PHP 5.3.27

TEST isArrayOf_1: result = fail, t = 0.036087036132812
TEST isArrayOf_2: result = fail, t = 0.11226201057434
TEST isArrayOf_3: result = fail, t = 0.053704977035522
TEST isArrayOf_4: result = fail, t = 0.078150987625122

TEST isArrayOf_1: result = fail, t = 0.0088350772857666
TEST isArrayOf_2: result = fail, t = 0.008991003036499
TEST isArrayOf_3: result = fail, t = 0.045068979263306
TEST isArrayOf_4: result = fail, t = 0.039391994476318
PHP 5.5.5

TEST isArrayOf_1: result = fail, t = 0.029086112976074
TEST isArrayOf_2: result = fail, t = 0.057933807373047
TEST isArrayOf_3: result = fail, t = 0.03432297706604
TEST isArrayOf_4: result = fail, t = 0.052994012832642

TEST isArrayOf_1: result = fail, t = 0.0085070133209229
TEST isArrayOf_2: result = fail, t = 0.0085380077362061
TEST isArrayOf_3: result = fail, t = 0.024166107177734
TEST isArrayOf_4: result = fail, t = 0.034998178482056
编辑

TEST isArrayOf_1: result = fail, t = 0.13473296165466
TEST isArrayOf_2: result = fail, t = 0.22269797325134
TEST isArrayOf_3: result = fail, t = 0.074767112731934
TEST isArrayOf_4: result = fail, t = 0.91770792007446

TEST isArrayOf_1: result = fail, t = 0.017352104187012
TEST isArrayOf_2: result = fail, t = 0.015971899032593
TEST isArrayOf_3: result = fail, t = 0.058960914611816
TEST isArrayOf_4: result = fail, t = 0.75518012046814
在我的笔记本电脑上的结果:

PHP 5.4.7

TEST isArrayOf_1: result = fail, t = 0.033294200897217
TEST isArrayOf_2: result = fail, t = 0.10196995735168
TEST isArrayOf_3: result = fail, t = 0.052531957626343
TEST isArrayOf_4: result = fail, t = 0.079360961914062

TEST isArrayOf_1: result = fail, t = 0.0085389614105225
TEST isArrayOf_2: result = fail, t = 0.0083901882171631
TEST isArrayOf_3: result = fail, t = 0.044848918914795
TEST isArrayOf_4: result = fail, t = 0.035619020462036
PHP 5.4.21

TEST isArrayOf_1: result = fail, t = 0.032476902008057
TEST isArrayOf_2: result = fail, t = 0.098520040512085
TEST isArrayOf_3: result = fail, t = 0.052137136459351
TEST isArrayOf_4: result = fail, t = 0.074975967407227

TEST isArrayOf_1: result = fail, t = 0.0085029602050781
TEST isArrayOf_2: result = fail, t = 0.0084490776062012
TEST isArrayOf_3: result = fail, t = 0.044224977493286
TEST isArrayOf_4: result = fail, t = 0.035413026809692
PHP 5.3.27

TEST isArrayOf_1: result = fail, t = 0.036087036132812
TEST isArrayOf_2: result = fail, t = 0.11226201057434
TEST isArrayOf_3: result = fail, t = 0.053704977035522
TEST isArrayOf_4: result = fail, t = 0.078150987625122

TEST isArrayOf_1: result = fail, t = 0.0088350772857666
TEST isArrayOf_2: result = fail, t = 0.008991003036499
TEST isArrayOf_3: result = fail, t = 0.045068979263306
TEST isArrayOf_4: result = fail, t = 0.039391994476318
PHP 5.5.5

TEST isArrayOf_1: result = fail, t = 0.029086112976074
TEST isArrayOf_2: result = fail, t = 0.057933807373047
TEST isArrayOf_3: result = fail, t = 0.03432297706604
TEST isArrayOf_4: result = fail, t = 0.052994012832642

TEST isArrayOf_1: result = fail, t = 0.0085070133209229
TEST isArrayOf_2: result = fail, t = 0.0085380077362061
TEST isArrayOf_3: result = fail, t = 0.024166107177734
TEST isArrayOf_4: result = fail, t = 0.034998178482056
编辑

TEST isArrayOf_1: result = fail, t = 0.13473296165466
TEST isArrayOf_2: result = fail, t = 0.22269797325134
TEST isArrayOf_3: result = fail, t = 0.074767112731934
TEST isArrayOf_4: result = fail, t = 0.91770792007446

TEST isArrayOf_1: result = fail, t = 0.017352104187012
TEST isArrayOf_2: result = fail, t = 0.015971899032593
TEST isArrayOf_3: result = fail, t = 0.058960914611816
TEST isArrayOf_4: result = fail, t = 0.75518012046814
在我的笔记本电脑上的结果:

PHP 5.4.7

TEST isArrayOf_1: result = fail, t = 0.033294200897217
TEST isArrayOf_2: result = fail, t = 0.10196995735168
TEST isArrayOf_3: result = fail, t = 0.052531957626343
TEST isArrayOf_4: result = fail, t = 0.079360961914062

TEST isArrayOf_1: result = fail, t = 0.0085389614105225
TEST isArrayOf_2: result = fail, t = 0.0083901882171631
TEST isArrayOf_3: result = fail, t = 0.044848918914795
TEST isArrayOf_4: result = fail, t = 0.035619020462036
PHP 5.4.21

TEST isArrayOf_1: result = fail, t = 0.032476902008057
TEST isArrayOf_2: result = fail, t = 0.098520040512085
TEST isArrayOf_3: result = fail, t = 0.052137136459351
TEST isArrayOf_4: result = fail, t = 0.074975967407227

TEST isArrayOf_1: result = fail, t = 0.0085029602050781
TEST isArrayOf_2: result = fail, t = 0.0084490776062012
TEST isArrayOf_3: result = fail, t = 0.044224977493286
TEST isArrayOf_4: result = fail, t = 0.035413026809692
PHP 5.3.27

TEST isArrayOf_1: result = fail, t = 0.036087036132812
TEST isArrayOf_2: result = fail, t = 0.11226201057434
TEST isArrayOf_3: result = fail, t = 0.053704977035522
TEST isArrayOf_4: result = fail, t = 0.078150987625122

TEST isArrayOf_1: result = fail, t = 0.0088350772857666
TEST isArrayOf_2: result = fail, t = 0.008991003036499
TEST isArrayOf_3: result = fail, t = 0.045068979263306
TEST isArrayOf_4: result = fail, t = 0.039391994476318
PHP 5.5.5

TEST isArrayOf_1: result = fail, t = 0.029086112976074
TEST isArrayOf_2: result = fail, t = 0.057933807373047
TEST isArrayOf_3: result = fail, t = 0.03432297706604
TEST isArrayOf_4: result = fail, t = 0.052994012832642

TEST isArrayOf_1: result = fail, t = 0.0085070133209229
TEST isArrayOf_2: result = fail, t = 0.0085380077362061
TEST isArrayOf_3: result = fail, t = 0.024166107177734
TEST isArrayOf_4: result = fail, t = 0.034998178482056
编辑

TEST isArrayOf_1: result = fail, t = 0.13473296165466
TEST isArrayOf_2: result = fail, t = 0.22269797325134
TEST isArrayOf_3: result = fail, t = 0.074767112731934
TEST isArrayOf_4: result = fail, t = 0.91770792007446

TEST isArrayOf_1: result = fail, t = 0.017352104187012
TEST isArrayOf_2: result = fail, t = 0.015971899032593
TEST isArrayOf_3: result = fail, t = 0.058960914611816
TEST isArrayOf_4: result = fail, t = 0.75518012046814
在我的笔记本电脑上的结果:

PHP 5.4.7

TEST isArrayOf_1: result = fail, t = 0.033294200897217
TEST isArrayOf_2: result = fail, t = 0.10196995735168
TEST isArrayOf_3: result = fail, t = 0.052531957626343
TEST isArrayOf_4: result = fail, t = 0.079360961914062

TEST isArrayOf_1: result = fail, t = 0.0085389614105225
TEST isArrayOf_2: result = fail, t = 0.0083901882171631
TEST isArrayOf_3: result = fail, t = 0.044848918914795
TEST isArrayOf_4: result = fail, t = 0.035619020462036
PHP 5.4.21

TEST isArrayOf_1: result = fail, t = 0.032476902008057
TEST isArrayOf_2: result = fail, t = 0.098520040512085
TEST isArrayOf_3: result = fail, t = 0.052137136459351
TEST isArrayOf_4: result = fail, t = 0.074975967407227

TEST isArrayOf_1: result = fail, t = 0.0085029602050781
TEST isArrayOf_2: result = fail, t = 0.0084490776062012
TEST isArrayOf_3: result = fail, t = 0.044224977493286
TEST isArrayOf_4: result = fail, t = 0.035413026809692
PHP 5.3.27

TEST isArrayOf_1: result = fail, t = 0.036087036132812
TEST isArrayOf_2: result = fail, t = 0.11226201057434
TEST isArrayOf_3: result = fail, t = 0.053704977035522
TEST isArrayOf_4: result = fail, t = 0.078150987625122

TEST isArrayOf_1: result = fail, t = 0.0088350772857666
TEST isArrayOf_2: result = fail, t = 0.008991003036499
TEST isArrayOf_3: result = fail, t = 0.045068979263306
TEST isArrayOf_4: result = fail, t = 0.039391994476318
PHP 5.5.5

TEST isArrayOf_1: result = fail, t = 0.029086112976074
TEST isArrayOf_2: result = fail, t = 0.057933807373047
TEST isArrayOf_3: result = fail, t = 0.03432297706604
TEST isArrayOf_4: result = fail, t = 0.052994012832642

TEST isArrayOf_1: result = fail, t = 0.0085070133209229
TEST isArrayOf_2: result = fail, t = 0.0085380077362061
TEST isArrayOf_3: result = fail, t = 0.024166107177734
TEST isArrayOf_4: result = fail, t = 0.034998178482056


在出现错误结果的情况下,循环通常会更快,因为您可以在发现类型不匹配的实例时打破循环,因此不会迭代整个数组;但是使用array_过滤器或(我更喜欢使用array_reduce,它应该比array_过滤器快)您总是迭代整个数组,但是迭代是由核心C代码而不是userland PHP codeHi Mark处理的,谢谢您的评论。我将添加一个使用
array\u reduce
的额外函数。在出现错误结果的情况下,循环通常会更快,因为您可以在发现类型不匹配的实例时打破循环,因此您不会迭代整个数组;但是使用array_过滤器或(我更喜欢使用array_reduce,它应该比array_过滤器快)您总是迭代整个数组,但是迭代是由核心C代码而不是userland PHP codeHi Mark处理的,谢谢您的评论。我将添加一个使用
array\u reduce
的额外函数。在出现错误结果的情况下,循环通常会更快,因为您可以在发现类型不匹配的实例时打破循环,因此您不会迭代整个数组;但是使用array_过滤器或(我更喜欢使用array_reduce,它应该比array_过滤器快)您总是迭代整个数组,但是迭代是由核心C代码而不是userland PHP codeHi Mark处理的,谢谢您的评论。我将添加一个使用
array\u reduce
的额外函数。在出现错误结果的情况下,循环通常会更快,因为您可以在发现类型不匹配的实例时打破循环,因此您不会迭代整个数组;但是使用array_过滤器或(我更喜欢使用array_reduce,它应该比array_过滤器快)您总是迭代整个数组,但是迭代是由核心C代码而不是userland PHP codeHi Mark处理的,谢谢您的评论。我将添加一个使用
array\u reduce
的额外函数。我已经测试了您的解决方案,但它在我的机器中性能不好(我已经更新了答案)。有什么想法吗?请注意,结果是针对单个迭代的,您确实需要将该练习重复几十次,然后查看平均值和标准偏差,以获得更准确的性能数据。这很奇怪。。。我已经执行了几次脚本,我总是得到类似的结果。。。(我使用的是PHP5.4.3)并不是所有的PHP版本都是相同的:)我的数据是使用5.4.7进行的一次迭代,但我使用5.4.21和5.3.27得到了类似的结果;而5.5.5为所有选项提供了更好的性能,我已经测试过了