array_walk

(PHP 4, PHP 5, PHP 7, PHP 8)

array_walk使用用戶自定義函數(shù)對(duì)數(shù)組中的每個(gè)元素做回調(diào)處理

說明

array_walk(array|object &$array, callable $callback, mixed $arg = null): bool

將用戶自定義函數(shù) funcname 應(yīng)用到 array 數(shù)組中的每個(gè)單元。

array_walk() 不會(huì)受到 array 內(nèi)部數(shù)組指針的影響。array_walk() 會(huì)遍歷整個(gè)數(shù)組而不管指針的位置。

參數(shù)

array

輸入的數(shù)組。

callback

典型情況下 callback 接受兩個(gè)參數(shù)。array 參數(shù)的值作為第一個(gè),鍵名作為第二個(gè)。

注意:

如果 callback 需要直接作用于數(shù)組中的值,則給 callback 的第一個(gè)參數(shù)指定為引用。這樣任何對(duì)這些單元的改變也將會(huì)改變?cè)紨?shù)組本身。

注意:

參數(shù)數(shù)量超過預(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

更新日志

版本 說明
8.0.0 如果 callback 期待通過引用傳遞第二個(gè)和第三個(gè)參數(shù), 此函數(shù)現(xiàn)在將拋出 E_WARNING。

錯(cuò)誤/異常

從 PHP 7.1.0 起,如果 callback 函數(shù)需要的參數(shù)(數(shù)組成員的值和鍵)超過2個(gè)或者 也傳遞了 arg 參數(shù)需要的參數(shù)超過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

參見

  • array_walk_recursive() - 對(duì)數(shù)組中的每個(gè)成員遞歸地應(yīng)用用戶函數(shù)
  • iterator_apply() - 為迭代器中每個(gè)元素調(diào)用一個(gè)用戶自定義函數(shù)
  • list() - 把數(shù)組中的值賦給一組變量
  • each() - 返回?cái)?shù)組中當(dāng)前的鍵/值對(duì)并將數(shù)組指針向前移動(dòng)一步
  • call_user_func_array() - 調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
  • array_map() - 為數(shù)組的每個(gè)元素應(yīng)用回調(diào)函數(shù)
  • foreach