php数组键值处理方式性能比较

实现功能:数组值做 +1 操作(测试案例中数组长度为1000w)

php版本:5.6.32

处理方式有:

  • foreach 加引用做循环+1
  • for 循环+1
  • foreach 普通循环+1
  • array_walk +1
  • array_map +1

代码:

<?php
ini_set('memory_limit', '2048M');

$j = 10000000;

// foreach with &
$arr = [];
for ($i = 1; $i <= $j; $i++) {
    $arr[] = $i;
}
$t1 = microtime(true);
foreach ($arr as &$value) {
    $value += 1;
}
$t2 = microtime(true);
$t  = $t2 - $t1;
echo "foreach with &: {$t}\n";

// for
$arr = [];
for ($i = 1; $i <= $j; $i++) {
    $arr[] = $i;
}
$t1 = microtime(true);
for ($i = 0; $i < $j; $i++) {
    $arr[$i] += 1;
}
$t2 = microtime(true);
$t  = $t2 - $t1;
echo "for: {$t}\n";

// foreach
$arr = [];
for ($i = 1; $i <= $j; $i++) {
    $arr[] = $i;
}
$t1 = microtime(true);
foreach ($arr as $key => $value) {
    $arr[$key] = $value + 1;
}
$t2 = microtime(true);
$t  = $t2 - $t1;
echo "foreach: {$t}\n";

// array_walk
$arr = [];
for ($i = 1; $i <= $j; $i++) {
    $arr[] = $i;
}
$t1  = microtime(true);
$arr = array_walk($arr, function (&$v) {
    $v += 1;
});
$t2 = microtime(true);
$t  = $t2 - $t1;
echo "array_walk: {$t}\n";

// array_map
$arr = [];
for ($i = 1; $i <= $j; $i++) {
    $arr[] = $i;
}
$t1  = microtime(true);
$arr = array_map(function ($v) {
    $v += 1;
    return $v;
}, $arr);
$t2 = microtime(true);
$t  = $t2 - $t1;
echo "array_map: {$t}\n";

测试结果:


总结:

数组循环方式性能排序:

带引用的foreach > for > 普通foreach > array_walk > array_map

经改变数组长度得知性能差别随数组长度的增大而增大。




猜你喜欢

转载自blog.csdn.net/ZopaulCode/article/details/79394057