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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Рекурсия

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: (сорри за повтор)
sofck
Отправлено: 10 Февраля, 2011 - 23:12:15
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




...но мой предыдущий пример не работает. Каким то магическим образом после 4 вложения вся цепочка сбивается.
сейчас буду краток:
PHP:
скопировать код в буфер обмена
  1. function display_child($parent)
  2. {
  3.         $sql = "SELECT * from `pages` WHERE subto='$parent'";
  4.         $result = mysql_query($sql);
  5.         echo '<ul>';
  6.         $x=1;
  7.         while ($row = mysql_fetch_array($result))
  8.                 {
  9.                         echo '<li>';
  10.                         echo $x.'.'.$row['name'];
  11.                         $x++;
  12.                         display_child($row['id']);
  13.                         echo '</li>';
  14.         }
  15.         echo '</ul>';
  16. }
  17. display_child(0);

Как сделать что бы нумерация была не просто числовая в текущем уровне а еще и перед текущем номером элементы был значение (адрес) был адрес всего родительского уровня.

К примеру
1 item
2 item
2.1 item
2.2 item
2.2.1 item
2.2.2 item
3 item

(Отредактировано автором: 10 Февраля, 2011 - 23:30:08)

 
 Top
sofck
Отправлено: 11 Февраля, 2011 - 13:33:14
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




Ну дядьки!! Есть же простое решение наверника! Подскажите плиз!(
 
 Top
LEONeso
Отправлено: 11 Февраля, 2011 - 13:45:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)






-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
sofck
Отправлено: 11 Февраля, 2011 - 13:51:33
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




И что это даст! От куда брать значение всех предыдущих родителей?
 
 Top
LEONeso
Отправлено: 11 Февраля, 2011 - 13:59:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




sofck, задача не ясна, каких родителей? что содержит таблица? что вы хотите сделать? Вы циклите цикл в цикле! Однако
(Добавление)
?
PHP:
скопировать код в буфер обмена
  1.       function display_child($parent)
  2.       {
  3.               $result = mysql_query("SELECT * from `pages` WHERE subto='$parent'");
  4.               echo '<ul>';
  5.               $x=1;$t=1;
  6.               while ($row = mysql_fetch_array($result))
  7.                       {
  8.                               echo '<li>';
  9.                               echo $x.'.'.$row['name'];
  10.                               $x++;
  11.                               $result = mysql_query("SELECT * from `pages` WHERE subto='$row['id']'");
  12.                                     while ($row = mysql_fetch_array($result))
  13.                               echo '<li>';
  14.                               echo $t.'.'.$row['name'];
  15.                               $t++;
  16.                               echo '</li>';
  17.                                     {
  18.  
  19.                               echo '</li>';
  20.               }
  21.               echo '</ul>';
  22.       }
  23.       display_child(0);

(Добавление)
не видя таблица, сложно понять, что там в ней.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
sofck
Отправлено: 11 Февраля, 2011 - 14:12:46
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




А в таблице всё просто

id=индификатор записи
name = название
subto = индивикатор родителя (если 0 то верхний уровень - главная)


так наглядней

(Отредактировано автором: 11 Февраля, 2011 - 14:17:33)

 
 Top
LEONeso
Отправлено: 11 Февраля, 2011 - 17:07:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




sofck, попытка сделать многоуровневое меню или древо сайта?
(Добавление)
а так, завтра после работы, могу поковыряться... но в моём исполнении может быть криво написано, но если получится, то работать будет Радость


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
sofck
Отправлено: 11 Февраля, 2011 - 17:13:26
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




[quote=LEONeso][/quote]
LEONeso пишет:
попытка сделать многоуровневое меню или древо сайта?



Ну да дерево сайта где у каждой страницы есть свой номер - в зависимости от её предков.
 
 Top
JustUserR
Отправлено: 12 Февраля, 2011 - 12:59:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




sofck пишет:
Но мой предыдущий пример не работает
Для осуществления корректного построения дерева объектов определение элементных связей которого обеспечивается на основании информационных полей обратной связи с родительским элементов - необходимо использоване такой рекурсивной функции которая осуществляет сохранение реальных элементов заданного уровня вложенности с обеспечением соответствия вложенного вызова функции - в то время как предполагаемый вариант осуществляет решение задачим не только с излишними вычислительными затратами связанными с подачей множества SQL-запросов и включения операций изменения элементного и реального трактования информационных полей - но также и не обеспечивает сохранение инстанции ресурса запроса и предшествующего вызова


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
LEONeso
Отправлено: 12 Февраля, 2011 - 16:20:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




JustUserR, Согласен... легче одним запросом вывести необходимые данные в многомерный массив и уже с ним работать.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
sofck
Отправлено: 12 Февраля, 2011 - 17:50:41
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




Ну вроде сделал. По крайне мере работает. Но если предложите вариант без множества запросов к бд. То буду благодарен. Вот мой рабочий вариант:
PHP:
скопировать код в буфер обмена
  1. function display_child($parent = 0, $level = NULL)
  2. {
  3.         $x=1;
  4.         $sql = "SELECT * from pages WHERE id!=2 and subto='$parent' ORDER BY sort";
  5.         $result = mysql_query($sql);
  6.         if(mysql_num_rows($result)>0)
  7.         {
  8.                 if($parent!=0){$level.='.';}
  9.         }
  10.         echo '<ul>';
  11.         while ($row = mysql_fetch_array($result))
  12.         {
  13.         echo '<li>';
  14.         echo $level;
  15.         echo $x.'. ';
  16.         echo $row['name'];
  17.         display_child($row['id'],$level.$x);   
  18.         $x++;
  19.         echo '</li>';
  20.         }
  21.         echo '</ul>';
  22. }

Спасибо всем.
 
 Top
JustUserR
Отправлено: 14 Февраля, 2011 - 14:01:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




sofck пишет:
Но если предложите вариант без множества запросов к бд. То буду благодарен
Для осуществления эффективного решения предполагаемой задачи включающей построение дерева элементов на основе использование параметра единичного вложенного соотношения - допустимо использование спеицализированной SQL-функции выполнение которой производится на сервере СУБД и является более эффективным по причине использования внутренних механизмов кеширования и реальной индексации данных
Более подробная информация по данному вопросу представлена здесь http://habrahabr[dot]ru/blogs/sql/27439/ и здесь http://article[dot]gmane[dot]org/gmane[dot]c[dot][dot][dot]g+trees+database


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB