是php自带的使用回调函数的数组批处理函数,看到这类函数的结构我就怀疑其处理效率。做了个小测试
$a[0]['id'] = 1;
$a[0]['name'] = "a";
$a[1]['id'] = 2;
$a[1]['name'] = "b";
$a[2]['id'] = 3;
$a[2]['name'] = "c";
$a[3]['id'] = 3;
$a[3]['name'] = "c";
$a[4]['id'] = 3;
$a[4]['name'] = "c";
$a[5]['id'] = 3;
$a[5]['name'] = "c";
$a[6]['id'] = 3;
$a[6]['name'] = "c";
$a[7]['id'] = 3;
$a[7]['name'] = "c";
$a[8]['id'] = 3;
$a[8]['name'] = "c";
$a[9]['id'] = 3;
$a[9]['name'] = "c";
$a[10]['id'] = 3;
$a[10]['name'] = "c";
function _map($x){
$x['cid'] = "abc";
return $x;
}
$t1 = microtime(true);
//方案1:自己创建回调函数,在mvc框架中,这类回调函数的调用很不方便,单独一个函数放在什么地方是个问题,所以首先想到用类似js的闭包。实际效率最低;平均58us
//$a = array_map(create_function('$x','$x["cid"] = "abc";return $x;'),$a);
//方案2:使用回调函数;平均30us
//$a = array_map('_map',$a);
//方案3:直接foreach遍历;平均20us
//foreach($a as $k=>$v) {
// $a[$k]['cid'] = "abc";
//}
//方案4:使用for循环;平均15us
for($i=0;$i<count($a);$i++){
$a[$i]['cid'] = "abc";
}
$t2 = microtime(true);
echo pow(10,4)*$t2 - pow(10,4)*$t1;
echo "<br>";
echo ($t2-$t1)*pow(10,6);
print_r("<pre>");
print_r ($a);
print_r("</pre>");
方案 | 测试方法 | 微秒数 |
---|---|---|
1 | array_map+create_function | 58 |
2 | array_map | 30 |
3 | foreach | 20 |
4 | for | 15 |