Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с рекурсией!
Форумы портала PHP.SU » PHP » Программирование на PHP » Помогите с рекурсией!

Страниц (1): [1]
 

1. sofck - 06 Февраля, 2011 - 12:49:38 - перейти к сообщению
Есть функия построения дерева.

PHP:
скопировать код в буфер обмена
  1. function cataloglinks($subto=0)//отображение дерева каталога
  2. {
  3.  
  4. $res = $db->customback('select id,subto,name from pages where list=1 and status=1 order by sort DESC')
  5. or die ("ошибко ".mysql_error());
  6. if(mysql_num_rows($res)<1){return false;}else{
  7.           while ($line = mysql_fetch_assoc($res)) {
  8.                 $tags[ (int) $line['subto'] ][] = array( (int) $line['id'], $line['name']);
  9.         }  
  10.         echo '<ul>';
  11.         for ($i=count($tags[$subto])-1; $i>=0;$i--) {//
  12.                
  13.                                 echo '<li>';   
  14.                                
  15.                         echo $tags[$subto][$i][1];
  16.                
  17.  if (isset($tags[ $tags[$subto][$i][0] ]))
  18.  {
  19. cataloglinks($tags[$subto][$i][0]);
  20.         }
  21.                 echo '</li>';
  22.         }
  23.         echo '</ul>';
  24. }
  25.  
  26. }        


как сделать что бы список был нумерованный. Ну тоесть для каждого вложения к началу нумерация подставлялось значение родителя. Ну к примеру есть пункт 2 у него вложения 2.1 2.2 дальше у пункта 2.2 есть тоже вложения и там уже было 2.2.1 и т.д


p.s. ($db->customback не обращайте внимания =)))
2. grefon - 06 Февраля, 2011 - 12:52:48 - перейти к сообщению
Радость Заменить <ul> ... </ul> на <ol> ... </ol>.
3. sofck - 06 Февраля, 2011 - 13:13:54 - перейти к сообщению
grefon пишет:
Радость Заменить <ul> ... </ul> на <ol> ... </ol>.


не то!)) Во первый мне нужно чтобы для каждого вложения к началу нумерация подставлялось значение родителя.

для того что бы в конце перечисления дерева будет создался массив
$data['name'] = 3.2.2 Страница
$data['uri'] = Где будет адрес страницы
4. Мелкий - 06 Февраля, 2011 - 13:23:23 - перейти к сообщению
http://htmlbook[dot]ru/css/counter-reset
Эту задачу CSS решать умеет
5. grefon - 06 Февраля, 2011 - 13:24:23 - перейти к сообщению
Цитата:
$data['name'] = 3.2.2 Страница
$data['uri'] = Где будет адрес страницы

Я правильно понял, что Вам нужно не только пронумеровать структуру, но и запихнуть ее в многомерный массив, где ключами будут номера списка, а значениями адреса страниц?
То есть массив должен будет выглядеть так:
Цитата:
"1" => "Страница первая"
"2" => "Вторая"
"2.1" => "Два один"
"2.2" => "Еще страница"
"3" => "Третья страница"
6. sofck - 06 Февраля, 2011 - 13:47:57 - перейти к сообщению
На счет массива это я так к слову сказал чтобы показать что <ol> не подходит )


Мне нужно получить переменную для каждого элемента которая содержит номера элемента в формате что я указал. Тоесть её номер в текущей категории и перед ни номер родителя
(Добавление)
Мелкий пишет:
http://htmlbook[dot]ru/css/counter-reset
Эту задачу CSS решать умеет


Ну только мне нужно не просто выводить это значение а получить его в "руки" для дальнейших действий!)
7. sofck - 06 Февраля, 2011 - 16:06:14 - перейти к сообщению
Разобрался!
Спасибо всем кто откликнулся. Ну а кому может потребуется то вот работающий пример.
Естественно для работы нужно поправить кое чего!))

вот код:
PHP:
скопировать код в буфер обмена
  1. <?
  2. function cataloglinks($subto=0,$num=NULL)
  3. {
  4. $n=1;
  5. $res = $this->db->customback('select id,subto,name from pages where list=1 and status=1 order by sort DESC')
  6. or die ("ошибко ".mysql_error());
  7. if(mysql_num_rows($res)<1){return false;}else{
  8.           while ($line = mysql_fetch_assoc($res)) {
  9.                 $tags[ (int) $line['subto'] ][] = array( (int) $line['id'], $line['name']);
  10.         }  
  11.         echo '<ul>';
  12.                
  13.         for ($i=count($tags[$subto])-1; $i>=0;$i--) {//
  14.                
  15.                                 echo '<li>';
  16.                                 if (isset($tags[ $tags[$subto][$i][0] ]))
  17.                                 {
  18.                                         echo $num;$num.=$n.'.';
  19.                                 }
  20.                                 else
  21.                                 {
  22.                                 echo $num;
  23.                                 }
  24.                                 echo $n++;
  25.                                 echo $tags[$subto][$i][1];             
  26.  
  27.  
  28.  if (isset($tags[ $tags[$subto][$i][0] ]))
  29.  {
  30.         cataloglinks($tags[$subto][$i][0],$num); $num=NULL;
  31. }
  32.  echo '</li>';
  33.       }
  34.         echo '</ul>';
  35. }
  36.  
  37. }  
  38. ?>
8. JustUserR - 06 Февраля, 2011 - 16:25:08 - перейти к сообщению
sofck Для осуществления автоматизированной генерации дерева зависимых элементов выбор которых производится из таблицы БД на основе указанных информационных полей реляционной связи - целесообразно использование средств создания SQL-процедур и выполнения целевых операций на стороне сервера БД - такой подход в значительной мере обеспечивает большую эффективность по причине снижения количества требуемых SQL-запросов и реализации прямого доступа в хранению и индексации информационных на сервере БД

 

Powered by ExBB FM 1.0 RC1