I have an array that is structured like this:
$json = ' [{' id ': "Children": [{"id": "Children": [{"id": 30},{"id": 29}]}]},{"id": 31},{"id": +}] '; $arry = Json_ Decode ($json, true);
It is also possible that the structure is:
$json = ' [{' id ': "Children": [{"id": "Children": [{"id": 31}]}]},{"id": "Children": [{"id": 29}]},{"id": 32}] '; $ Arry = Json_decode ($json, true);
That is to say, the number of layers, the order is not fixed.
I want to drop him into a one-dimensional array and record the depth of each one-dimensional array, the corresponding parent key, etc.
The following is the expected result of the second array:
Array ([0] = = Array ([id] = [level] = 0 [Parent] = 0) [1] = = Array ([id] = [level] = 1 [ Parent] [2] = = Array ([id] = [level] = + 2 [Parent] = +) [3] = = Array ([id] = [leve L] = 0 [parent] + 0) [4] = = Array ([id] = [level] = 1 [Parent] = +) [5] = = Array ([ID] =&G T [Level] = 0 [Parent] = 0))
Thought for a night ... Ask God for help.
Reply to discussion (solution)
$json = ' [{"id": "Children": [{"id":-"" Children ": [{" id ": 31}]}]},{" id ": 28," Children ": [{" id ": 29}]},{" id ": +}] '; $arry = Json_decode ($json, True);p Rint_r (foo ($arry)); function foo ($ar, $level = 0, $parent =0, & $res =array ()) {foreach ($ar as $v) {$t = array (); $v [' level '] = $level; $v [' parent '] = $parent; if (Isset ($v [' Children '])) {$t = $v [' Children ']; unset ($v [' Children ']); } $res [] = $v; if ($t) foo ($t, $level +1, $v [' id '], $res); } return $res;}
Array ( [0] = = Array ( [id] = [level] = 0 [Parent] = 0 ) [1] = = Array
( [id] = [level ] = 1 [Parent] = + ) [2] = = Array ( [id] = 31< C15/>[level] + 2 [Parent] = [ 3] = = Array ( [id] = [level ] = = 0< C22/>[parent] + 0 ) [4] = = Array ([id] = [Level] = 1 [Parent] = 28< c29/>) [5] = = Array ( [id] = [level] = 0 [Parent] = 0 ))
$json = ' [{"id": "Children": [{"id":-"" Children ": [{" id ": 31}]}]},{" id ": 28," Children ": [{" id ": 29}]},{" id ": +}] '; $arry = Json_decode ($json, True);p Rint_r (foo ($arry)); function foo ($ar, $level = 0, $parent =0, & $res =array ()) {foreach ($ar as $v) {$t = array (); $v [' level '] = $level; $v [' parent '] = $parent; if (Isset ($v [' Children '])) {$t = $v [' Children ']; unset ($v [' Children ']); } $res [] = $v; if ($t) foo ($t, $level +1, $v [' id '], $res); } return $res;}
Array ( [0] = = Array ( [id] = [level] = 0 [Parent] = 0 ) [1] = = Array
( [id] = [level ] = 1 [Parent] = + ) [2] = = Array ( [id] = 31< C15/>[level] + 2 [Parent] = [ 3] = = Array ( [id] = [level ] = = 0< C22/>[parent] + 0 ) [4] = = Array ([id] = [Level] = 1 [Parent] = 28< c29/>) [5] = = Array ( [id] = [level] = 0 [Parent] = 0 ))
Ah!!!
Thank you very much!
if (Isset ($v [' Children '])) { $t = $v [' Children ']; unset ($v [' Children ']); }
I can't think of this step.