Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод дерева
 
 автор: nikita2206   (23.07.2010 в 16:46)   письмо автору
 
 

Знаю, знаю... Тема очень заезжена... Но случай немного необычный.
Имеется в базе такая вот табличка:
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(
    
=> array(
        
'link'  => 'http://ya.ru',
        
'text'  => 'яндекс',
        
'id' => 1,
        
'children' => array(
            
=> array(
                
'link' => 'blablabla',
                
'text' => 'http://asdasd/',
                
'id' => 2,
                
'children' => array()
            ),
            
=> array(
                
'link' => 'http://asdasd/',
                
'text' => 'blalblaba',
                
'id' => 3,
                
'children' => array()
            )
        )
    ),
    
=> array(
        
'link'  => 'http://google.com',
        
'text'  => 'google',
        
'id' => 4,
        
'children' => array(
            
=> array(
                
'link' => 'http://blablabla/',
                
'text' => 'aasfasf',
                
'id' => 5,
                
'children' => array()
            ),
            
=> array(
                
'link' => 'http://asdasd/',
                
'text' => 'adasdqwe',
                
'id' => 6,
                
'children' => array()
            )
        )
    )
);

Тут получается, что ключи у массивов(которые int) - order

Это вообще возможно сделать одним запросом? Подскажите как?

  Ответить  
 
 автор: ddhvvn   (25.07.2010 в 12:55)   письмо автору
 
   для: nikita2206   (23.07.2010 в 16:46)
 

Для вывода дерева обычно используется рекурсия, а рекурсия это функция, значит смотрите в сторону функций/процедур в MySQL

  Ответить  
 
 автор: nikita2206   (25.07.2010 в 17:00)   письмо автору
 
   для: 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;
    }

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования