PHP

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

Структура данных такова:
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>';

?>
Теги:
array, print, title, printTree, child, parent, отрисовки, реализации, элементов, равно, элементы, массив, функция, передаётся, count, массива, нового, После, другим, выбирает, относятся, происходит, выполняет, вышло, Вообщем, foreach, explode, global, function, предыдущем, параметра, элемента, индексу, данному, шагом
Добавлено: 24 Августа 2013 05:47:50 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...