將函式應用於陣列的每個元素
要將函式應用於陣列中的每個專案,請使用 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
允許你更改陣列項的值,但不能更改鍵。通過引用將金鑰傳遞給回撥是有效的,但沒有效果。