php array_map_recursive是一個非常強大有用的函數,它可以遞歸地遍歷多維數組,并對每一個元素應用一個回調函數。該函數返回的是一個新的數組,其中每一個元素都是原數組元素經過回調函數處理后的結果。
下面來舉幾個例子,通過array_map_recursive來實現一些常見的數據處理任務:
// 二維數組元素加上一個常數 function add_const_recursive($arr, $const) { return array_map_recursive(function($x) use ($const) { return $x + $const; }, $arr); } $arr = [[1, 2], [3, 4]]; $new_arr = add_const_recursive($arr, 10); var_dump($new_arr); // 輸出[[11, 12], [13, 14]] // 二維數組元素拼上一個字符串 function concat_str_recursive($arr, $str) { return array_map_recursive(function($x) use ($str) { return $x . $str; }, $arr); } $arr = [['foo', 'bar'], ['hello', 'world']]; $new_arr = concat_str_recursive($arr, '-'); var_dump($new_arr); // 輸出[['foo-', 'bar-'], ['hello-', 'world-']]
上面的例子展示了array_map_recursive的核心用法:遞歸地遍歷數組,并對每一個元素應用一個回調函數。
在實際的應用中,我們可能還需要對多維數組進行一些更復雜的操作。下面是一些更高級的用法示例:
// 將二維數組轉成一維數組 function flatten_recursive($arr) { $result = []; array_map_recursive(function($x) use (&$result) { $result[] = $x; }, $arr); return $result; } $arr = [[1, 2], [3, 4]]; $new_arr = flatten_recursive($arr); var_dump($new_arr); // 輸出[1, 2, 3, 4] // 將二維數組中的某個值作為鍵名 function to_assoc_recursive($arr, $key) { $result = []; array_map_recursive(function($x) use (&$result, $key) { if (isset($x[$key])) { $result[$x[$key]] = $x; } }, $arr); return $result; } $arr = [['id' =>1, 'name' =>'foo'], ['id' =>2, 'name' =>'bar']]; $new_arr = to_assoc_recursive($arr, 'id'); var_dump($new_arr); // 輸出[1 =>['id' =>1, 'name' =>'foo'], 2 =>['id' =>2, 'name' =>'bar']]
其中,flatten_recursive函數通過遞歸地遍歷多維數組,將所有元素都放到一個一維數組中。to_assoc_recursive函數則是把二維數組中的某一個元素作為鍵名,把整個子數組作為鍵值。這些例子都展示了array_map_recursive很靈活的特性,可以用于非常多樣的數據處理任務。
總而言之,array_map_recursive是一個非常強大有用的函數,可以遞歸地遍歷多維數組,并對每一個元素應用一個回調函數。它的用途非常廣泛,可以實現很多復雜的數據處理任務。使用時只需要傳入一個回調函數和要操作的數組,函數就會返回一個新的數組,其中每一個元素都是原數組元素經過回調函數處理后的結果。