将函数应用于数组的每个元素
要将函数应用于数组中的每个项目,请使用 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_walk
和 array_walk_recursive
允许你更改数组项的值,但不能更改键。通过引用将密钥传递给回调是有效的,但没有效果。