array_walk 还是 array_map

作者:编程家 分类: php 时间:2025-05-12

使用 array_walk 还是 array_map?

在 PHP 中,我们经常需要对数组进行操作,比如对数组中的每个元素进行处理或者转换。为了实现这个目的,PHP 提供了两个非常常用的函数:array_walk 和 array_map。

array_walk 函数用于对数组中的每个元素应用用户自定义的回调函数。它会遍历数组,并将每个元素传递给回调函数进行处理。回调函数可以修改原始数组中的元素,也可以返回一个新的值。array_walk 函数会直接修改原始数组。

相比之下,array_map 函数则是返回一个新的数组,该数组的元素是通过回调函数对原始数组中的元素进行处理得到的。原始数组不会被修改。

接下来,我们将通过一个案例来对比 array_walk 和 array_map 的使用。

使用 array_walk 修改原始数组

假设我们有一个存储学生考试成绩的数组,我们希望将每个学生的成绩都加上 10 分。我们可以使用 array_walk 来实现这个需求。

php

$grades = [80, 90, 75, 85];

// 定义回调函数

function addTen(&$value)

{

$value += 10;

}

// 使用 array_walk 修改原始数组

array_walk($grades, 'addTen');

// 打印修改后的数组

print_r($grades);

运行上述代码,输出结果为:

Array

(

[0] => 90

[1] => 100

[2] => 85

[3] => 95

)

我们可以看到,通过使用 array_walk 函数,并传递一个回调函数 addTen,我们成功地将每个学生的成绩都加上了 10 分。原始数组 $grades 被直接修改了。

使用 array_map 返回新的数组

现在我们来使用 array_map 函数来完成同样的任务,但是返回一个新的数组,而不修改原始数组。

php

$grades = [80, 90, 75, 85];

// 定义回调函数

function addTen($value)

{

return $value + 10;

}

// 使用 array_map 返回新的数组

$newGrades = array_map('addTen', $grades);

// 打印新的数组

print_r($newGrades);

运行上述代码,输出结果为:

Array

(

[0] => 90

[1] => 100

[2] => 85

[3] => 95

)

我们可以看到,通过使用 array_map 函数,并传递一个回调函数 addTen,我们得到了一个新的数组 $newGrades,其中每个学生的成绩都加上了 10 分。原始数组 $grades 并没有被修改。

array_walk 还是 array_map?

在选择使用 array_walk 还是 array_map 时,我们需要考虑到我们的需求。如果我们希望直接修改原始数组,那么可以使用 array_walk。而如果我们希望得到一个新的数组,而不修改原始数组,那么可以使用 array_map。

无论是 array_walk 还是 array_map,在处理数组时都非常方便实用。根据不同的需求,我们可以选择合适的函数来完成我们的任务。