Получая из базы многомерный массив для отображения в меню обычно стоит задача обработать его и получить массив для дальнейшей обработке во вьюшке.
Я не стал описывать интерфейс класса, т.к. и так понятно что и как, для опытных программистов.
<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); /* * Second test task * @autor Glazyrev Konstantin * */ class Tree { /* * input array * */ public $arr_tree = array(); /* * output array */ public $a = array(); public function __construct() { $this -> arr_tree = array( array('node_id' => 1, 'parent_id' => NULL, 'title' => 'Node 1'), array('node_id' => 2, 'parent_id' => '1', 'title' => 'Node 2'), array('node_id' => 3, 'parent_id' => '2', 'title' => 'Node 3'), array('node_id' => 4, 'parent_id' => '2', 'title' => 'Node 4'), array('node_id' => 5, 'parent_id' => NULL, 'title' => 'Node 5'), ); } public function building_tree() { // node_id parent_id title if ($this -> arr_tree['0']) return $this -> build($this -> arr_tree); } /** * @param array $arr - array of data to send to the method * @param array $node_array - array of data to send to the method of repetition menu * @param int|bool $parent_id $parent_id - value parent id * @param int $node_id value parent * @param int|bool $parent_id $parent_id - key parent id * @param int $node_id key node */ private function build($arr, &$node_array = array(), $parent_id = NULL, $node_id = 0, $node = 'node_id', $parent = 'parent_id') { // многомерный родительский массив перебираем foreach ($arr as $value) { if ($value[$parent] == $parent_id) { $node_array['array'][$value[$node]] = $value; } } if (isset($node_array['array'])) { foreach ($node_array['array'] as $val) { $this -> build($arr, $node_array['array'][$val[$node]], $val[$node]); } } $this -> a = $node_array; return $node_array; } } $obj = new Tree; $obj -> building_tree(); print_r($obj -> a);
В итоге должно получится что-то вроде такого на выходе
Array ( [array] => Array ( [1] => Array ( [node_id] => 1 [parent_id] => [title] => Node 1 [array] => Array ( [2] => Array ( [node_id] => 2 [parent_id] => 1 [title] => Node 2 [array] => Array ( [3] => Array ( [node_id] => 3 [parent_id] => 2 [title] => Node 3 ) [4] => Array ( [node_id] => 4 [parent_id] => 2 [title] => Node 4 ) ) ) ) ) [5] => Array ( [node_id] => 5 [parent_id] => [title] => Node 5 ) ) )