I have a multidimensional array of arrays (source below), where my keys and values are arbitrary strings. I want to create a new array (desired below), where the hierarchy stays the same, but every KEY is restructured into its own array, with the key itself becoming a ‘title’ value, and any subarrays are continued under ‘children’.
How can I accomplish this using a recursive function that takes &$source and &$destination arrays, and populates the destination array accordingly?
Source Array:
Array ( [Alpha] => Array ( [Red] => one [Blue] => two ) [Bravo] => Array ( [Blue] => three ) )
Desired Array:
Array ( [0] => Array ( [title] => Alpha [children] => Array ( [0] Array([title] => Red, [children]= > false) [1] Array([title] => Blue, [children]= > false) ) ) [1] => Array ( [title] => Bravo [0] Array([title] => Blue, [children]= > false) ) ) )
Note: I don’t care about the final nodes/leafs in my new array.
Advertisement
Answer
You can do te conversion without passing a reference to the destination array.
function convert_array($from){ if(!is_array($from)){ return false; } $to = array(); foreach($from as $k=>$v){ $to[] = array( 'title' => $k, 'children' => convert_array($v) ); } return $to; }