Good afternoon, the task is as follows: Given a multidimensional array, you need to display all the elements of the array in the form of a tree, each level must begin with two spaces and a new construction.

$tree = [ "level 1" => ["level 1.1", "level 1.2"], "level 2", "level 3" => ["level 3.1", "level 3.2" => ["level 3.2.1", "level 3.2.2"], "level 3.3"], "level 4" => ["level 4.1", "level 4.2", "level 4.3", "level 4.4"], ]; 

I can’t build a tree in any way, I've been racking my brain for an hour, I need fresh ideas :)

 function showTree($tree) { if (is_array($tree)) { foreach ($tree as $key => $value) { if (is_array($value)) { echo $key; } showTree($value); } echo "\n\r"; } else { echo " $tree,"; } } 

    3 answers 3

    for correct indentation you need to know the depth of the recursion.

     function printTree($data, $level = 0){ foreach($data as $k => $v){ $isArray = is_array($v); echo str_pad('', $level*2).($isArray ? $k : $v)."\n"; if($isArray){ printTree($v, $level + 1); } } } printTree($tree); 
    • Thank you very much! Operationally =) - LuckyGamerTV

    Add another option to the collection of answers:

     $tree = [ "level 1" => ["level 1.1", "level 1.2"], "level 2", "level 3" => ["level 3.1", "level 3.2" => ["level 3.2.1", "level 3.2.2"], "level 3.3"], "level 4" => ["level 4.1", "level 4.2", "level 4.3", "level 4.4"], ]; echo tree($tree); function tree($array, $tab = '', $result = '') { foreach ($array as $key => $value) { if (is_array($value)) { $result .= "{$tab}[$key] <i style='color:red;'>(array)</i><br>"; $result .= tree($value, $tab . str_repeat('&nbsp;', 4)); } else { $result .= "{$tab}[$key] => <b>$value</b><br>"; } } return $result; } 

    Result:

     [level 1] (array) [0] => level 1.1 [1] => level 1.2 [0] => level 2 [level 3] (array) [0] => level 3.1 [level 3.2] (array) [0] => level 3.2.1 [1] => level 3.2.2 [1] => level 3.3 [level 4] (array) [0] => level 4.1 [1] => level 4.2 [2] => level 4.3 [3] => level 4.4 
    • Thank!!! Operationally =) - LuckyGamerTV

    showTree ($ value); replace with showTree2 ($ value); The function then showTree2 is called. Least.

    • thanks, but it's just a typo in the post =) - LuckyGamerTV