array_map,array_walk和array_filter之间的区别
究竟是什么之间的区别array_map
,array_walk
和array_filter
。我从文档中可以看到,您可以传递一个回调函数来对提供的数组执行操作。但是我似乎没有发现它们之间有什么特别的区别。
他们执行相同的事情吗?
它们可以互换使用吗?
如果它们完全不同,请提供示例说明,我们将不胜感激。
回答:
- 更改值:
array_map
可以时不能更改输入数组内的值array_walk
;特别是,array_map
永远不要更改其参数。
- 阵列键访问:
array_map
不能使用阵列键操作,array_walk
可以。
- 返回值:
array_map
返回一个新数组,array_walk
仅返回true
。因此,如果您不想由于遍历一个数组而创建一个数组,则应使用array_walk
。
- 迭代多个数组:
array_map
它还可以接收任意数量的数组,并且可以并行地对其进行迭代,而array_walk
只能在一个数组上进行操作。
- 将任意数据传递给回调:
array_walk
可以接收一个额外的任意参数以传递给回调。自PHP 5.3(引入匿名函数时)以来,这几乎无关紧要。
- 返回数组的长度:
- 得到的数组的
array_map
长度与最大输入数组的长度相同;array_walk
不返回数组,但同时不能更改原始数组的元素数;array_filter
根据过滤功能仅选择数组元素的子集。它确实保留了密钥。
- 得到的数组的
例:
<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
)
以上是 array_map,array_walk和array_filter之间的区别 的全部内容, 来源链接: utcz.com/qa/408081.html