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

Форум PHP

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

 

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

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

тема: Построить список
 
 автор: dima_s_d_s   (05.03.2010 в 11:55)   письмо автору
 
 

Есть такой массив

Array
(
    [0] => Array
        (
            [categories_id]     => 8
            [categories_left]     => 3
            [categories_right]     => 4
            [categories_level]     => 2
            [categories_name]     => NameCat_8
            [nflag]             => 0
        )

    [1] => Array
        (
            [categories_id]     => 9
            [categories_left]     => 5
            [categories_right]     => 6
            [categories_level]     => 2
            [categories_name]     => NameCat_9
            [nflag]             => 0
        )

    [2] => Array
        (
            [categories_id]     => 3
            [categories_left]     => 7
            [categories_right]     => 8
            [categories_level]     => 2
            [categories_name]     => NameCat_3
            [nflag]             => 0
        )

    [3] => Array
        (
            [categories_id]     => 11
            [categories_left]     => 9
            [categories_right]     => 10
            [categories_level]     => 2
            [categories_name]     => NameCat_11
            [nflag]             => 0
        )

    [4] => Array
        (
            [categories_id]     => 13
            [categories_left]     => 11
            [categories_right]     => 12
            [categories_level]     => 2
            [categories_name]     => NameCat_13
            [nflag] => 0
        )

    [5] => Array
        (
            [categories_id]     => 14
            [categories_left]     => 13
            [categories_right]     => 14
            [categories_level]     => 2
            [categories_name]     => NameCat_14
            [nflag]             => 0
        )

    [6] => Array
        (
            [categories_id]     => 22
            [categories_left]     => 15
            [categories_right]     => 16
            [categories_level]     => 2
            [categories_name]     => NameCat_22 
            [nflag]             => 0
            [content_title]     => <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
                                <li><a href="/">ContCat_22</a></li>
        )

    [7] => Array
        (
            [categories_id] => 23
            [categories_left] => 17
            [categories_right] => 22
            [categories_level] => 2
            [categories_name] => NameCat_23 
            [nflag] => 1
            [content_title] => 
        )

    [8] => Array
        (
            [categories_id] => 24
            [categories_left] => 18
            [categories_right] => 19
            [categories_level] => 3
            [categories_name] => NameCat_24 
            [nflag] => 0
            [content_title] => <li><a href="/">ContCat_24</a></li>
                            <li><a href="/">ContCat_24</a></li>
        )

    [9] => Array
        (
            [categories_id] => 25
            [categories_left] => 20
            [categories_right] => 21
            [categories_level] => 3
            [categories_name] => NameCat_25 
            [nflag] => 0
            [content_title] => 
        )
)


Как можно из этого массива получить такой список:

            <ul id="browser7">
                <li>NameCat_8</li>
                <li>NameCat_9</li>
                <li>NameCat_3</li>
                <li>NameCat_11</li>
                <li>NameCat_13</li>
                <li>NameCat_14</li>
                <li>
                    <span class="folder">NameCat_22</span>
                    <ul>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                        <li><a href="/">ContCat_22</a></li>
                    </ul>
                </li>
                <li>
                    <span class="folder">NameCat_23</span>
                    <ul>
                        <li>
                            <span class="folder">NameCat_24</span>
                            <ul>
                                <li><a href="/">ContCat_24</a></li>
                                <li><a href="/">ContCat_24</a></li>
                            </ul>
                        </li>
                        <li>NameCat_25</li>
                    </ul>
                </li>
            </ul>


Заранее благодарен.

  Ответить  
 
 автор: Trianon   (05.03.2010 в 12:42)   письмо автору
 
   для: dima_s_d_s   (05.03.2010 в 11:55)
 

это не список. Это текст. Фрагмент HTML-кода.
Естественно, текст по массиву можно сгенерировать.

  Ответить  
 
 автор: dima_s_d_s   (05.03.2010 в 13:33)   письмо автору
 
   для: Trianon   (05.03.2010 в 12:42)
 

А можно ближе к вопросу а не к философии.

  Ответить  
 
 автор: Trianon   (05.03.2010 в 13:38)   письмо автору
 
   для: dima_s_d_s   (05.03.2010 в 13:33)
 

А можно я Вас отправлю Nested Sets изучать.

Стилистика и пунктуация автора сохранены.

  Ответить  
 
 автор: dima_s_d_s   (05.03.2010 в 13:43)   письмо автору
 
   для: Trianon   (05.03.2010 в 13:38)
 

Спасибо Trianon, с Вложенным множеством я знаком.
Думаю я услышал от Вас все что вы хотели сказать, поэту жду предложений от других гуру.

  Ответить  
 
 автор: Trianon   (05.03.2010 в 13:50)   письмо автору
 
   для: dima_s_d_s   (05.03.2010 в 13:43)
 

Но если Вы знакомы с Nested Sets, и знаете , что структура, размещенная у Вас в массиве именно такова, то а) почему ни слова о них не сказали?
и б) Nested sets вроде как ориентирован именно на прямой вывод потока. Что вызывает затруднения в выводе?

  Ответить  
 
 автор: dima_s_d_s   (05.03.2010 в 14:06)   письмо автору
 
   для: Trianon   (05.03.2010 в 13:50)
 

>Но если Вы знакомы с Nested Sets, и знаете , что структура, размещенная у Вас в массиве именно такова, то а) почему ни слова о них не сказали?
>и б) Nested sets вроде как ориентирован именно на прямой вывод потока. Что вызывает затруднения в выводе?

Если бы сразу с БД, всё было бы проще, но тут не идет речь вывода с БД, нужно обработать данные именно с этого массива.

  Ответить  
 
 автор: dima_s_d_s   (05.03.2010 в 14:14)   письмо автору
 
   для: Trianon   (05.03.2010 в 13:50)
 

Вот набросал небольшую функцию, пока не идеал и не совсем корректно работает.
Если кто поможет довести до ума, буду благодарен.

<?php
function MyTrees($tree$id=0) {

    
$output="";
    
$HtmlTree = array(
            
"OpenTag"               => '<div><ul>' ,
            
"FirstLevelOpenTag"         => '<li><span class="folder">[categories_name]</span><ul>',
            
"MyFirstLevelOpenTagS"    => '<li><span class="folder">[categories_name]</span><ul>',
            
"MyFirstLevelOpenTagE"    => '[content_title]',
            
"FirstLevelOpenTagSelected" => '<li>[categories_name]<ul>',
            
"LevelOpenTag"        => '<li><span class="folder">[categories_name]</span><ul>[content_title]',
            
"LevelOpenTagSelected"      => '<li>[categories_name]<ul>',
            
"***OldNode"                      => '[categories_name]',
            
"Node"                => '<li>[categories_name]</li>',
            
"MyNodeS"            => '<li><span class="folder">[categories_name]</span>',
            
"MyNodeE"               => '',
            
"NodeNews"              => '<ul>[content_title]</ul></li>',
            
"NodeSelected"          => '<li>[categories_name]<ul>',
            
"***OldFirstLevelCloseTag"    => '',
            
"FirstLevelCloseTag"    => '</ul></li>',
            
"FirstLevelCloseTagSelected"=> '</ul></li>',
            
"LevelCloseTag"         => '</ul></li>',
            
"LevelCloseTagSelected"    => '</ul></li>',
            
"CloseTag"            => '</ul></div>'
    
);

    
$end count($tree);
    
$id=0;
    for(
$i=0$i<$end ;$i++) {
        
$body "";
        
$c $tree[$i];
        
$i2 $i 1;

        if(
$i2 $end) {
            
$next_loop      =  $tree[$i2];
            
$next_loop_level =     $next_loop['categories_level'];
        }
        else {
            
$next_loop_level 1;
        }

        if( 
$next_loop_level $c['categories_level']) {
            if(
$c['categories_level'] > 1) {
                if(
$c['categories_id'] == $id) {
                    
$body.= $HtmlTree['LevelOpenTagSelected'];
                }
                else {
                    
$body.= $HtmlTree['LevelOpenTag'];
                }
            }
            else {
                if(
$c['categories_id'] == $id) {
                    
$body .= $HtmlTree['FirstLevelOpenTagSelected'];
                }
                else {
                    if(isset(
$c['content_title']) && $c['content_title']!='') {
                        
$body .= $HtmlTree['MyFirstLevelOpenTagS'];
                        
$body .= $HtmlTree['MyFirstLevelOpenTagE'];
                    }
                    else {
                        
$body .= $HtmlTree['FirstLevelOpenTag'];
                    }
                }
            }
        }
        elseif( 
$next_loop_level $c['categories_level'] AND $next_loop_level >= 1) {
            if(
$next_loop_level == && $c['categories_level'] == 2) {
                if(
$c['categories_id'] == $id) {
                    
$body .= $HtmlTree['NodeSelected'];
                }
                else {
                    if(isset(
$c['content_title']) && $c['content_title']!='') {
                        
$body.= $HtmlTree['MyNodeS'];
                        
$body.=$HtmlTree['NodeNews'];
                        
$body.=$HtmlTree['MyNodeE'];
                    }
                    else {
                        
$body.= $HtmlTree['Node'];
                    }
                }
                if(
$c['categories_id'] == $id) {
                    
$body .= $HtmlTree['FirstLevelCloseTagSelected'];
                }
                else {
                    
$body .= $HtmlTree['FirstLevelCloseTag'];
                }
            }
            else {
                if(
$c['categories_id'] == $id) {
                    
$body .= $HtmlTree['NodeSelected'];
                }
                else {
                    if(isset(
$c['content_title']) && $c['content_title']!='') {
                        
$body.= $HtmlTree['MyNodeS'];
                        
$body.=$HtmlTree['NodeNews'];
                        
$body.=$HtmlTree['MyNodeE'];
                    }
                    else {
                        
$body.= $HtmlTree['Node'];
                    }
                }
                for(
$j $c['categories_level']; $j $next_loop_level $j--) {
                    if(
$j == 2) {
                        if(
$c['categories_id'] == $id) {
                            
$body .= $HtmlTree['FirstLevelCloseTagSelected'];
                        }
                        else {
                            
$body .= $HtmlTree['FirstLevelCloseTag'];
                        }
                    }
                    else {
                        if(
$c['categories_id'] == $id) {
                            
$body .= $HtmlTree['LevelCloseTagSelected'];
                        }
                        else {
                            
$body .= $HtmlTree['LevelCloseTag'];
                        }
                    }
                }
            }
        }
        else {
            if(
$c['categories_id'] == $id) {
                
$body .= $HtmlTree['NodeSelected'];
            }
            else {
                if(isset(
$c['content_title']) && $c['content_title']!='') {
                    
$body.= $HtmlTree['MyNodeS'];
                    
$body.=$HtmlTree['NodeNews'];
                    
$body.=$HtmlTree['MyNodeE'];
                }
                else {
                    
$body.= $HtmlTree['Node'];
                }
            }
        }

        foreach(
$c as $key => $value) {
           
$body str_replace("[$key]" ,$value$body);

        }

        
$next_loop_level--;
        
$output.= $body;
    }
    return 
$output=$HtmlTree["OpenTag"].$output.$HtmlTree['CloseTag'];
}
?>

  Ответить  
Rambler's Top100
вверх

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