(PHP 4, PHP 5, PHP 7, PHP 8)
array_walk — 使用用戶自定義函數(shù)對(duì)數(shù)組中的每個(gè)元素做回調(diào)處理
將用戶自定義函數(shù) funcname
應(yīng)用到
array
數(shù)組中的每個(gè)單元。
array_walk() 不會(huì)受到 array
內(nèi)部數(shù)組指針的影響。array_walk()
會(huì)遍歷整個(gè)數(shù)組而不管指針的位置。
array
輸入的數(shù)組。
callback
典型情況下
callback
接受兩個(gè)參數(shù)。array
參數(shù)的值作為第一個(gè),鍵名作為第二個(gè)。
注意:
如果
callback
需要直接作用于數(shù)組中的值,則給callback
的第一個(gè)參數(shù)指定為引用。這樣任何對(duì)這些單元的改變也將會(huì)改變?cè)紨?shù)組本身。
注意:
參數(shù)數(shù)量超過(guò)預(yù)期,傳入內(nèi)置函數(shù) (例如 strtolower()), 將拋出警告,所以不適合當(dāng)做
funcname
。
只有 array
的值才可以被改變,用戶不應(yīng)在回調(diào)函數(shù)中改變?cè)摂?shù)組本身的結(jié)構(gòu)。例如增加/刪除單元,unset
單元等等。如果 array_walk()
作用的數(shù)組改變了,則此函數(shù)的的行為未經(jīng)定義,且不可預(yù)期。
arg
如果提供了可選參數(shù) arg
,將被作為第三個(gè)參數(shù)傳遞給
callback
。
返回 true
。
版本 | 說(shuō)明 |
---|---|
8.0.0 |
如果 callback 期待通過(guò)引用傳遞第二個(gè)和第三個(gè)參數(shù),
此函數(shù)現(xiàn)在將拋出 E_WARNING 。
|
從 PHP 7.1.0 起,如果 callback
函數(shù)需要的參數(shù)(數(shù)組成員的值和鍵)超過(guò)2個(gè)或者
也傳遞了 arg
參數(shù)需要的參數(shù)超過(guò)3個(gè)時(shí),會(huì)拋出 ArgumentCountError。
在此之前,每次 array_walk() 調(diào)用 callback
的時(shí)候都會(huì)生成 E_WARNING 級(jí)別的錯(cuò)誤。
示例 #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');
?>
以上例程會(huì)輸出:
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple