array_map,array_walk和array_filter之间的区别

究竟是什么之间的区别array_maparray_walkarray_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

回到顶部