array_map、array_walk和array_filter之间的区别
和 之间究竟有什么区别。我从文档中可以看到的是,您可以传递回调函数以对提供的数组执行操作。但我似乎没有发现它们之间有任何特别的区别。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
仅返回 。因此,如果您不想在遍历一个数组后创建数组,则应使用array_walk
。true
array_map
还可以接收任意数量的数组,并且可以并行迭代它们,而array_walk
仅对一个数组进行操作。array_walk
可以接收额外的任意参数以传递给回调。自 PHP 5.3(引入匿名函数时)以来,这几乎无关紧要。array_filter
根据过滤函数仅选取数组元素的子集。它确实保留了密钥。array_map
array_walk
例:
<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
foreach
从理论上讲,函数映射之类的事情可以并行完成,因为应用于数据的函数应该只影响数据,而不会影响全局状态。这是因为 可以选择将函数应用于 项目中的任何顺序(即使在 PHP 中它没有)。array_map
array_walk
另一方面,它与处理数据数组的方法完全相反。它不是单独处理每个项目,而是使用状态 (),并且可以就地编辑项目(很像 foreach 循环)。由于每次项目都应用了,因此它可能会更改程序的全局状态,因此需要一种正确的方法来处理项目。&$userdata
$funcname
回到PHP land,并且几乎完全相同,除了让你更好地控制数据的迭代,通常用于“更改”数据就地与返回新的“changed”数组。array_map
array_walk
array_walk
array_filter
实际上是(或)的应用程序,它或多或少只是为了方便而提供的。array_walk
array_reduce