|
|
|
| есть БД
table
id parent name level
1 0 name1 1
2 0 name2 1
3 0 name3 1
4 1 name4 2
5 1 name5 2
6 0 name6 1
7 5 name7 2
8 5 name8 2
|
никак не могу сделать список типа
<ul>
<li>name1</li>
<ul>
<li>name4</li>
<li>name5</li>
</ul>
<li>name2</li>
<li>name3</li>
</ul>
|
с использованием минимального количества запросов к базе... пробовал через массивы то есть на php обработать ответ загнать в разные массивы по уровням а пото строить список, ничего не получилось может есть у кого идеи? | |
|
|
|
|
|
|
|
для: Poul
(05.02.2008 в 15:44)
| | а есть ли закономерность между вставками ul?
можно считать обращения к базе и выводить ul после определенного колва оборотов | |
|
|
|
|
|
|
|
для: moonfox
(05.02.2008 в 16:38)
| | закономерность в базе... те данные которые на уровень отличаются должны входить после данных которые указанны в поле parent
name1 является parent для name4 и name5, значит после li name1/li должен идти ul в который войдут 4 и 5 name | |
|
|
|
|
|
|
|
для: Poul
(05.02.2008 в 17:10)
| | Интересная задачка :0)
Я так решил (только следите, чтобы зацыкливания небыло)
<?php
//неассоциативный массив
$data[] = array('1', '0', 'name1', '1');
$data[] = array('2', '0', 'name2', '1');
$data[] = array('3', '0', 'name3', '1');
$data[] = array('4', '1', 'name4', '2');
$data[] = array('5', '1', 'name5', '2');
$data[] = array('6', '0', 'name6', '1');
$data[] = array('7', '5', 'name7', '2');
$data[] = array('8', '5', 'name8', '2');
$i=1;
//Делаю ассоциативный массив
foreach ($data as $row)
{
$data_assoc[$i]['id'] = $row[0];
$data_assoc[$i]['parent'] = $row[1];
$data_assoc[$i]['name'] = $row[2];
$data_assoc[$i]['level'] = $row[3];
$i++;
}
// массив с пасставленными элементами
$parsed = array();
function pre($data_assoc,$i,$parsed)
{
if (!in_array($data_assoc[$i]['id'],$parsed))
{
echo "<li>",$data_assoc[$i]['name'],"</li>";
$parsed[] = $data_assoc[$i]['id'];
for ($j=1;$j<=count($data_assoc);$j++)
{
if($data_assoc[$i]['id']==$data_assoc[$j]['parent'])
{
echo "<ul>";
$parsed = pre($data_assoc,$j,$parsed);
echo "</ul>";
}
}
}
return $parsed;
}
echo "<ul>";
foreach($data_assoc as $row)
{
if ($row['parent']==0)
{
$parsed = pre($data_assoc,$row['id'],$parsed);
}
}
echo "</ul>";
?>
|
| |
|
|
|