array_map
、array_walk
和array_filter
之间到底有什么区别.从文档中我可以看到,您可以传递回调函数来对提供的数组执行操作.但我似乎没有发现它们之间有什么特别的区别.
Do they perform the same thing?
Can they be used interchangeably?
如果它们有任何不同,我将感谢您提供的示例.
array_map
、array_walk
和array_filter
之间到底有什么区别.从文档中我可以看到,您可以传递回调函数来对提供的数组执行操作.但我似乎没有发现它们之间有什么特别的区别.
Do they perform the same thing?
Can they be used interchangeably?
如果它们有任何不同,我将感谢您提供的示例.
array_map
不能更改输入数组内的值,而array_walk
可以;尤其是,array_map
从未改变其论点.array_map
不能使用数组键操作,array_walk
可以.array_map
返回新数组,array_walk
仅返回true
.因此,如果您不想因为遍历一个数组而创建数组,则应该使用array_walk
.array_map
还可以接收任意数量的数组,它可以并行地对它们进行迭代,而array_walk
只对一个数组进行操作.array_walk
可以接收一个额外的任意参数传递给回调函数.自PHP5.3(引入anonymous functions)以来,这一点基本上是无关紧要的.例子:
<pre>
<?php
$origarray1 = array(2.4, 2.6, 3.5);
$origarray2 = array(2.4, 2.6, 3.5);
print_r(array_map('floor', $origarray1)); // $origarray1 stays the same
// changes $origarray2
array_walk($origarray2, function (&$v, $k) { $v = floor($v); });
print_r($origarray2);
// this is a more proper use of array_walk
array_walk($origarray1, function ($v, $k) { echo "$k => $v", "\n"; });
// array_map accepts several arrays
print_r(
array_map(function ($a, $b) { return $a * $b; }, $origarray1, $origarray2)
);
// select only elements that are > 2.5
print_r(
array_filter($origarray1, function ($a) { return $a > 2.5; })
);
?>
</pre>
结果:
Array
(
[0] => 2
[1] => 2
[2] => 3
)
Array
(
[0] => 2
[1] => 2
[2] => 3
)
0 => 2.4
1 => 2.6
2 => 3.5
Array
(
[0] => 4.8
[1] => 5.2
[2] => 10.5
)
Array
(
[1] => 2.6
[2] => 3.5
)