Отрисовка связных элементов массива в 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,
предыдущем,
параметра,
элемента,
индексу,
данному,
шагом
Комментарии:
Нету комментариев для вывода...