一、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-tw/n/280883.html