Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > построить директорное меню из таблицы


Автор: Elfet 27.1.2005, 23:53
Вообщем есть бд, а в бд записи вот такого типа:
id title des
тобишь иди относится к другой таблице с текстом, титле - заглавие, а в дес - описание (http://forum.vingrad.ru/index.php?showtopic=40918&view=findpost&p=313750)
page=home/into/www.

вот и нужно построить такое меню:

приходит home/into

отображается всё что можно получить по запросу из home/ ( des LIKE 'home/%' and des LIKE 'home%')


*home*

//----------
// into
//----------
-www
-go
-home

//----------
// about
//----------
-www
-go
-home



приходит home/into/go

отображается всё что можно получить по запросу из home/into/go

*home*

//----------
// into
//----------
-www
-go
--Helo
--Us
--Hi
-home

//----------
// about
//----------
-www
-go
-home



тобишь таблица состоит из
page=home.
page=home/into.
page=home/into/www.
page=home/into/go.
page=home/into/go/Helo.
page=home/into/go/Us.
page=home/into/go/Hi.
page=home/into/home.
page=home/about.
page=home/about/www.
page=home/about/go.
page=home/about/home.


SOS!!! нужна помощь! не хочу писать мутантов! smile
smile


Автор: Elfet 28.1.2005, 13:04
мне нужно из этого:
Код

page=home.
page=home/into.
page=home/into/www.
page=home/into/go.
page=home/into/go/Helo.
page=home/into/go/Us.
page=home/into/go/Hi.
page=home/into/home.
page=home/about.
page=home/about/www.
page=home/about/go.
page=home/about/home.


получить вот это:

Код

array (
           'home' => array (
                                       'into' => array (
                                                                 'www' => '',
                                                                 'go' => array (
                                                                                         'Helo'  => '',
                                                                                         'Us'  => '',
                                                                                         'Hi'  => '',
                                                                                      ),
                                                                 'home' => '',
                                                               ),
                                       'about' => array (
                                                                    'www' => '',
                                                                    'go'  => '',
                                                                    'home' => '',
                                                                 ),
                                     ),
        );

Добавлено @ 13:07
Код

Array
(
   [home] => Array
       (
           [into] => Array
               (
                   [www] =>
                   [go] => Array
                       (
                           [Helo] =>
                           [Us] =>
                           [Hi] =>
                       )

                   [home] =>
               )

           [about] => Array
               (
                   [www] =>
                   [go] =>
                   [home] =>
               )

       )

)

Автор: IZ@TOP 28.1.2005, 15:12
Да проще не бывает:

Код

<?php

echo "<pre>";

$a = 'page=home.
page=home/into.
page=home/into/www.
page=home/into/go.
page=home/into/go/Helo.
page=home/into/go/Us.
page=home/into/go/Hi.
page=home/into/home.
page=home/about.
page=home/about/www.
page=home/about/go.
page=home/about/home.';

function setTree(&$Tree, $Level) {
if(sizeof($Level) > 1) {
 $Root   = array_shift($Level);
 if(!isset($Tree[$Root])) $Tree[$Root] = array();
 setTree($Tree[$Root], $Level);
} else {
 $Tree[$Level[0]] = '';
}
}

preg_match_all("%page\=([^\.]*)%si", $a, $match);

$Tree = array();

while($m = array_shift($match[1])) {
$Next = explode('/', trim($m));
if(sizeof($Next) > 1) {
 $Root   = array_shift($Next);
 if(!isset($Tree[$Root])) $Tree[$Root] = array();
 setTree($Tree[$Root], $Next);
} else {
 $Tree[$Next[0]] = '';
}
}


print_r($Tree);


?>

Автор: Elfet 28.1.2005, 15:34
огого! и впрямь смешно! smile

Автор: IZ@TOP 28.1.2005, 15:42
Elfet, так что? Не подходит чтоли?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)