一、array_walk_recursive函數概述
array_walk_recursive是PHP中用於對數組或對象中的每個元素應用用戶自定義函數的函數,其遞歸地遍歷多維數組或對象,對每個元素執行用戶自定義的回調函數。
array_walk_recursive是在原數組上直接操作,只對數組的值進行修改,而不改變鍵值,它的語法格式如下:
array_walk_recursive (array $array, callable $callback [, mixed $userdata = NULL ] ) : bool
二、array_walk_recursive函數示例
示例一
本示例演示對一個二維數字數組的每個元素執行一次回調函數,該回調函數在每個元素前插入字符串 “Walking index “,代碼如下:
<?php
$input = array('a', 'b', array('c', 'd'));
array_walk_recursive($input, function(&$item, $key) {
$item = 'Walking index '.$key.': '.$item;
});
print_r($input);
?>
執行結果為:
Array
(
[0] => Walking index 0: a
[1] => Walking index 1: b
[2] => Array
(
[0] => Walking index 0: c
[1] => Walking index 1: d
)
)
示例二
本示例演示使用回調函數逆向處理數組的值,代碼如下:
<?php
$arr = ["hello", "world", ["foo", "bar", ["hi", "earth"]]];
function reverse_value(&$value, $key) {
$value = strrev($value);
}
array_walk_recursive($arr, 'reverse_value');
print_r($arr);
?>
執行結果為:
Array
(
[0] => olleh
[1] => dlrow
[2] => Array
(
[0] => oof
[1] => rab
[2] => Array
(
[0] => ih
[1] => htrae
)
)
)
示例三
本示例演示傳遞附加參數給回調函數,代碼如下:
<?php
$trainers = array(
array("name" => "Gary", "pokemon" => array("Squirtle", "Bulbasaur", "Charmander")),
array("name" => "Ash", "pokemon" => array("Pikachu", "Squirtle")),
array("name" => "Misty", "pokemon" => array("Staryu", "Togepi"))
);
function printData(&$item, $key, $separator) {
if(is_array($item)) {
$item = implode($separator, $item);
}
echo $key . ' : ' . $item . '<br/>';
}
array_walk_recursive($trainers, function(&$item, $key) use($separator) {
printData($item, $key, "/");
});
?>
執行結果為:
name : Gary<br/>
0 : Squirtle<br/>
1 : Bulbasaur<br/>
2 : Charmander<br/>
name : Ash<br/>
0 : Pikachu<br/>
1 : Squirtle<br/>
name : Misty<br/>
0 : Staryu<br/>
1 : Togepi<br/>
三、array_walk_recursive函數注意事項
1、array_walk_recursive函數僅限於單個變量(scalar)的類型強制轉換;如果回調函數試圖修改數組結構,例如添加或刪除元素,則函數將失敗,因為它無法跟蹤新索引。
2、 array_walk_recursive函數接受回調函數的引用參數(&$item)。這使得您可以修改函數內部的參數值。
3、傳遞給回調函數的$key參數是元素的鍵。如果是二維或更高維,則鍵將包括每個嵌套維。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280883.html
微信掃一掃
支付寶掃一掃