將函式應用於陣列的每個元素

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