|
|
|
| Есть такой массив
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>
|
Заранее благодарен. | |
|
|
|
|
|
|
|
для: dima_s_d_s
(05.03.2010 в 11:55)
| | это не список. Это текст. Фрагмент HTML-кода.
Естественно, текст по массиву можно сгенерировать. | |
|
|
|
|
|
|
|
для: Trianon
(05.03.2010 в 12:42)
| | А можно ближе к вопросу а не к философии. | |
|
|
|
|
|
|
|
для: dima_s_d_s
(05.03.2010 в 13:33)
| | А можно я Вас отправлю Nested Sets изучать.
Стилистика и пунктуация автора сохранены. | |
|
|
|
|
|
|
|
для: Trianon
(05.03.2010 в 13:38)
| | Спасибо Trianon, с Вложенным множеством я знаком.
Думаю я услышал от Вас все что вы хотели сказать, поэту жду предложений от других гуру. | |
|
|
|
|
|
|
|
для: dima_s_d_s
(05.03.2010 в 13:43)
| | Но если Вы знакомы с Nested Sets, и знаете , что структура, размещенная у Вас в массиве именно такова, то а) почему ни слова о них не сказали?
и б) Nested sets вроде как ориентирован именно на прямой вывод потока. Что вызывает затруднения в выводе? | |
|
|
|
|
|
|
|
для: Trianon
(05.03.2010 в 13:50)
| | >Но если Вы знакомы с Nested Sets, и знаете , что структура, размещенная у Вас в массиве именно такова, то а) почему ни слова о них не сказали?
>и б) Nested sets вроде как ориентирован именно на прямой вывод потока. Что вызывает затруднения в выводе?
Если бы сразу с БД, всё было бы проще, но тут не идет речь вывода с БД, нужно обработать данные именно с этого массива. | |
|
|
|
|
|
|
|
для: 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 == 1 && $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'];
}
?>
|
| |
|
|
|