将函数应用于数组的每个元素

要将函数应用于数组中的每个项目,请使用 array_map()。这将返回一个新数组。

$array = array(1,2,3,4,5);
//each array item is iterated over and gets stored in the function parameter.
$newArray = array_map(function($item) {
    return $item + 1;
}, $array);

$newArray 现在是 array(2,3,4,5,6);

你可以使用命名函数,而不是使用匿名函数。以上内容可以写成:

function addOne($item) {
    return $item + 1;
}

$array = array(1, 2, 3, 4, 5);
$newArray = array_map('addOne', $array);

如果命名函数是类方法,则函数的调用必须包含对方法所属的类对象的引用:

class Example {
    public function addOne($item) {
        return $item + 1;
    }

    public function doCalculation() {
        $array = array(1, 2, 3, 4, 5);
        $newArray = array_map(array($this, 'addOne'), $array);
    }
}

将函数应用于数组中每个项目的另一种方法是 array_walk()array_walk_recursive()。传递给这些函数的回调同时获取每个数组项的键/索引和值。这些函数不会返回新数组,而是返回成功的布尔值。例如,要打印简单数组中的每个元素:

$array = array(1, 2, 3, 4, 5);
array_walk($array, function($value, $key) {
    echo $value . ' ';
});
// prints "1 2 3 4 5"

回调的 value 参数可以通过引用传递,允许你直接在原始数组中更改值:

$array = array(1, 2, 3, 4, 5);
array_walk($array, function(&$value, $key) {
    $value++;
});

$array 现在是 array(2,3,4,5,6);

对于嵌套数组,array_walk_recursive() 将深入到每个子数组:

$array = array(1, array(2, 3, array(4, 5), 6);
array_walk_recursive($array, function($value, $key) {
    echo $value . ' ';
});
// prints "1 2 3 4 5 6"

注意array_walkarray_walk_recursive 允许你更改数组项的值,但不能更改键。通过引用将密钥传递给回调是有效的,但没有效果。