Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

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

тема: раскрывающийся список из базы данных
 
 автор: Poul   (05.02.2008 в 15:44)   письмо автору
 
 

есть БД
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 обработать ответ загнать в разные массивы по уровням а пото строить список, ничего не получилось может есть у кого идеи?

   
 
 автор: moonfox   (05.02.2008 в 16:38)   письмо автору
 
   для: Poul   (05.02.2008 в 15:44)
 

а есть ли закономерность между вставками ul?
можно считать обращения к базе и выводить ul после определенного колва оборотов

   
 
 автор: Poul   (05.02.2008 в 17:10)   письмо автору
 
   для: moonfox   (05.02.2008 в 16:38)
 

закономерность в базе... те данные которые на уровень отличаются должны входить после данных которые указанны в поле parent

name1 является parent для name4 и name5, значит после li name1/li должен идти ul в который войдут 4 и 5 name

   
 
 автор: MIchail1982   (06.02.2008 в 12:34)   письмо автору
 
   для: 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>";
?>

   
Rambler's Top100
вверх

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