array_walk
(PHP 4, PHP 5, PHP 7, PHP 8)
array_walk — 使用使用者自定義函式對陣列中的每個元素做回撥處理
說明
將使用者自定義函式 funcname
應用到
array
陣列中的每個單元。
array_walk() 不會受到 array
內部陣列指針的影響。array_walk()
會遍歷整個陣列而不管指針的位置。
參數
-
array
-
輸入的陣列。
-
callback
-
典型情況下
callback
接受兩個參數。array
參數的值作為第一個,鍵名作為第二個。注意:
如果
callback
需要直接作用於陣列中的值,則給callback
的第一個參數指定為引用。這樣任何對這些單元的改變也將會改變原始陣列本身。注意:
參數數量超過預期,傳入內建函式 (例如 strtolower()), 將拋出警告,所以不適合當做
funcname
。只有
array
的值才可以被改變,使用者不應在回撥函式中改變該陣列本身的結構。例如增加/刪除單元,unset 單元等等。如果 array_walk() 作用的陣列改變了,則此函式的的行為未經定義,且不可預期。 -
arg
-
如果提供了可選參數
arg
,將被作為第三個參數傳遞給callback
。
返回值
返回 true
。
錯誤/異常
從 PHP 7.1.0 起,如果 callback
函式需要的參數(陣列成員的值和鍵)超過2個或者
也傳遞了 arg
參數需要的參數超過3個時,會拋出 ArgumentCountError。
在此之前,每次 array_walk() 呼叫 callback
的時候都會產生 E_WARNING 級別的錯誤。
更新日誌
版本 | 說明 |
---|---|
8.0.0 |
如果 callback 期待通過引用傳遞第二個和第三個參數,
此函式現在將拋出 E_WARNING 。
|
範例
示例 #1 array_walk() 例子
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2\n";
}
echo "Before ...:\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
?>
以上例程會輸出:
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple
示例 #2 array_walk() example using anonymous function
<?php
$elements = ['a', 'b', 'c'];
array_walk($elements, function ($value, $key) {
echo "{$key} => {$value}\n";
});
?>
以上例程會輸出:
0 => a 1 => b 2 => c
參見
- array_walk_recursive() - 對陣列中的每個成員遞迴地應用使用者函式
- iterator_apply() - 為迭代器中每個元素呼叫一個使用者自定義函式
- list() - 把陣列中的值賦給一組變數
- each() - 返回陣列中目前的鍵/值對並將陣列指針向前移動一步
- call_user_func_array() - 呼叫回撥函式,並把一個陣列參數作為回撥函式的參數
- array_map() - 為陣列的每個元素應用回撥函式
- foreach