|
|
|
| Знаю, знаю... Тема очень заезжена... Но случай немного необычный.
Имеется в базе такая вот табличка:
CREATE TABLE IF NOT EXISTS `menu` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`pid` int(10) NOT NULL,
`link` varchar(256) NOT NULL,
`text` varchar(128) NOT NULL,
`order` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
|
И на выходе должны получить массив такого вида:
<?php
array(
0 => array(
'link' => 'http://ya.ru',
'text' => 'яндекс',
'id' => 1,
'children' => array(
0 => array(
'link' => 'blablabla',
'text' => 'http://asdasd/',
'id' => 2,
'children' => array()
),
1 => array(
'link' => 'http://asdasd/',
'text' => 'blalblaba',
'id' => 3,
'children' => array()
)
)
),
1 => array(
'link' => 'http://google.com',
'text' => 'google',
'id' => 4,
'children' => array(
0 => array(
'link' => 'http://blablabla/',
'text' => 'aasfasf',
'id' => 5,
'children' => array()
),
1 => array(
'link' => 'http://asdasd/',
'text' => 'adasdqwe',
'id' => 6,
'children' => array()
)
)
)
);
|
Тут получается, что ключи у массивов(которые int) - order
Это вообще возможно сделать одним запросом? Подскажите как? | |
|
|
|
|
|
|
|
для: nikita2206
(23.07.2010 в 16:46)
| | Для вывода дерева обычно используется рекурсия, а рекурсия это функция, значит смотрите в сторону функций/процедур в MySQL | |
|
|
|
|
|
|
|
для: ddhvvn
(25.07.2010 в 12:55)
| | Да, сделал давно уже.
<?php
private function _getList($array, $level = 0, $pid = 0){
$list = array();
foreach($array as $item){
if($level == $item['level'] && $item['pid'] == $pid){
$list[] = array(
'link' => $item['link'],
'text' => $item['text'],
'id' => $item['id'],
'children' => $this->_getList($array, $level + 1, $item['id'])
);
}
}
return $list;
}
public function getMenuArray(){
$query = $this->db->query('SELECT * FROM `menu` ORDER BY `order`');
$array = array();
foreach($query->result_array() as $row) $array[] = $row;
$list = $this->_getList($array);
return $list;
}
|
| |
|
|
|