使用使用者自定義函式對陣列中的每個元素做回撥處理

array_walk

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

array_walk使用使用者自定義函式對陣列中的每個元素做回撥處理

說明

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

將使用者自定義函式 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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *