array_map/array_filter/array_walk遍历数组的方式和foreach一样,谁要快一些啊?
array_walk相当于foreach:
1 2 3 | $arr = [ 'Client' => 'jQuery' , 'Server' => 'PHP' ];
array_walk ( $arr , function ( $v , $k ) { echo "键:$k 值:$v\n" ;
});
|
比如去除数组$arr元素的前后空白:
1 2 3 4 5 6 7 8 9 10 11 12 13 | array_walk ( $arr , function (& $v ) { $v = trim( $v ); }); foreach ( $arr as & $v ) { $v = trim( $v ); }
array_filter : 用回调函数过滤数组中的单元,返回过滤后的数组
var_export(
array_filter ([1, 2, 3], function ( $v ) { return $v > 1;
})
);
和 foreach ([1, 2, 3] as $k => $v ) { if ( $v > 1) { $tmp [ $k ] = $v ;
}
}
var_export( $tmp );
都输出: array ( 1 => 2, 2 => 3,
)
|
PHP数组映射化简(MapReduce):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | array_map / array_reduce
array_map : 将回调函数作用到给定数组的单元上
var_export(
array_map ( function ( $v ) {
return $v * $v ;
}, [1, 2, 3])
);
和
foreach ([1, 2, 3] as $v ) {
$tmp [] = $v * $v ;
}
var_export( $tmp );
都输出:
array (
0 => 1,
1 => 4,
2 => 9,
)
|
array_reduce: 用回调函数迭代地将数组简化(reduce)为单一的值//输出16,即10+1+2+3,其中10作为初始值.
1 2 3 4 5 6 7 8 9 10 | echo array_reduce ([1, 2, 3], function ( $result , $item ) {
$result = $result + $item ;
return $result ;
}, 10);
用 foreach 表达:
$result = 10;
foreach ([1, 2, 3] as $v ) {
$result = $result + $v ;
}
echo $result ;
|
执行效果都一样,但是具体的用函数快还是用foreach快些啊
高洛峰3104 days ago1325