Получая из базы многомерный массив для отображения в меню обычно стоит задача обработать его и получить массив для дальнейшей обработке во вьюшке.
Я не стал описывать интерфейс класса, т.к. и так понятно что и как, для опытных программистов.
<?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
)
)
)