Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11653
Последний выпуск: 19.06.2015

Отрисовка связных элементов массива в PHP

Автор: К.Карпенко <LoRd1990@gmail.com> URL: http://e-code.tnt43.com

Структура данных такова:

1|0|Electronics
2|0|Video
3|0|Photo
4|1|MP3 player
5|1|TV
6|4|iPod
7|6|Shuffle
8|3|SLR
9|8|DSLR
10|9|Nikon
11|9|Canon
12|11|20D

Данные хранятся в виде построчных записей, с полями id, parent_id и title.При этом полю parent_id присваивается нулевое значение в том случае, когда элемент является автономным и находится на верхнем уровне иерархии элементов. Скажу пару слов о реализации. Для реализации отрисовки был выбран стандартный рекурсивный алгоритм, а так же использованы строковые функции входящие в стандартную поставку пакета PHP. Для отрисовки в функцию, изначально, передаётся массив содержащий все записи из БД. Первым шагом функция выбирает корневые элементы, а то есть такие, которые не относятся к другим, и их значение pid равно нулю.После происходит составление нового массива элементов, значение pid которых, равно текущему индексу элемента (элементы дочерние данному). Далее функция выполняет рекурсивный вызов, в качестве параметра при этом передаётся составленный на предыдущем шаге массив.

Вообщем как это вышло :)

<?php
$data=file('data.db');
$db=array();

foreach($data as $k=>$v){
    $v=explode('|',$v);
    $db[$k]=array();
    $db[$k]['id']=$v[0];
    $db[$k]['pid']=$v[1];
    $db[$k]['title']=$v[2];
}


function printTree($array){
    global $db;
    for($i=0;$i<(count($array));$i++){
        #print $array[$i]['id'].'='.$array[$i]['title'];
        if($array[$i]['pid']==0){
            print '<li>'.$array[$i]['title']."</li>";
            $child=array();
            for($j=0;$j<count($db);$j++){
                if($db[$j]['pid']!=0 && $db[$j]['pid']==$array[$i]['id']){
                    $child[]=array('id'=>$db[$j]['id'],'pid'=>0,'title'=>$db[$j]['title']);
                }
            }
            print '<ul>';
            print printTree($child);
            print '</ul>';
        }
    }
}

print'<ul>';
printTree($db);
print'</ul>';

?>

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
97K
25 мая 2016 года
Андрей Зеленцов
0 / / 25.05.2016
Мне нравитсяМне не нравится
25 мая 2016, 23:54:32
Согласен
2.
212
01 октября 2004 года
DissDoc
639 / / 01.10.2004
Мне нравитсяМне не нравится
29 октября 2007, 16:31:33
Бугога! =) Это для статьи в целом.
Но с другой стороны для новичков очень даже интересные есть моменты. Рекурсия та же.. или представление данных (пусть и не самый красивый вариант)
3.
217
31 июля 2007 года
SkyM@n
1.7K / / 31.07.2007
Мне нравитсяМне не нравится
4 августа 2007, 06:09:35
Вот это ща туда народу побежит!!! :))))))) RNFR! LOL!
4.
9.6K
14 апреля 2006 года
elrevin
31 / / 14.04.2006
Мне нравитсяМне не нравится
27 июля 2007, 08:13:55
интересно чем ИНПП и его IT отдел занимается?!
зачем в printtree масив передавать, поредал pid и пошел рисовать элементы, отрисовал один вызывай ее опять и передавай ей id только что отрисованного элемента. такие задачи решают учащиеся старших классов ;), извините товарищь - незачет!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог