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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Saymor
Отправлено: 19 Апреля, 2013 - 11:09:00
Post Id



Новичок


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


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




Имеются данные в БД в виде "id", "parent", "info" при помощи рекурсии делаю многоуровневое меню. Всё прекрасно работает как надо.

Вопрос в том, как сделать навигационную цепочку (Навигационное меню, «Хлебные крошки») имея "id", "parent", "info"?

то есть исходя из того в какой из кактегорий во вложенности я нахожусь, надо формировать навигационную цепочку, типа:
Категория -> ПодКатегория -> ПодПодКатегория

(Отредактировано автором: 19 Апреля, 2013 - 11:11:48)

 
 Top
OrmaJever Модератор
Отправлено: 19 Апреля, 2013 - 11:18:46
Post Id



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


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


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




В чём проблема ити рекурсией в обратную строну?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 11:24:39
Post Id



Новичок


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


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




OrmaJever пишет:
В чём проблема ити рекурсией в обратную строну?

Улыбка хорошо, что вы меня поняли.
именно это понять и не могу!

вот пример моей рекурсии, которой я вывожу дерево каталогов
PHP:
скопировать код в буфер обмена
  1.  
  2. function myRecursia($option, $tree, $parent){
  3.     if(empty($tree[$parent])) return;
  4.    
  5.     echo "<ul>";
  6.     for($i=0, $n=count($tree[$parent]); $i<$n; $i++){
  7.        
  8.         echo '<li>';
  9.             echo $tree[$parent][$i]->name;
  10.             # РЕКУРСИЯ
  11.            myRecursia($option, $tree, $tree[$parent][$i]->id);
  12.         echo "</li>";
  13.     }
  14.     echo "</ul>";
  15.  }
  16.  
 
 Top
OrmaJever Модератор
Отправлено: 19 Апреля, 2013 - 11:54:10
Post Id



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


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


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




покажите как вы вытягиваете из базы, и структуру масива $tree


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 13:02:42
Post Id



Новичок


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


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




OrmaJever пишет:
покажите как вы вытягиваете из базы, и структуру масива $tree


Получаю масив $tree вида:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [5] => Array
  4.         (
  5.             [0] => stdClass Object
  6.                 (
  7.                     [id] => 8
  8.                     [name] => !!!_Новая категория
  9.                     [parent] => 5
  10.                     [type] => category
  11.                 )
  12.  
  13.         )
  14.  
  15.     [1] => Array
  16.         (
  17.             [0] => stdClass Object
  18.                 (
  19.                     [id] => 9
  20.                     [name] => !!!_Новая категория
  21.                     [parent] => 1
  22.                 )
  23.  
  24.             [1] => stdClass Object
  25.                 (
  26.                     [id] => 10
  27.                     [name] => !!!_Новая категория
  28.                     [parent] => 1
  29.                 )
  30.  
  31.             [2] => stdClass Object
  32.                 (
  33.                     [id] => 7
  34.                     [name] => 444
  35.                     [parent] => 1
  36.                 )
  37.  
  38.         )
  39.  
  40.     [0] => Array
  41.         (
  42.             [0] => stdClass Object
  43.                 (
  44.                     [id] => 18
  45.                     [name] => Ворота
  46.                     [parent] => 0
  47.                 )
  48.  
  49.             [1] => stdClass Object
  50.                 (
  51.                     [id] => 15
  52.                     [name] => Гарнитуры
  53.                     [parent] => 0
  54.                 )
  55.  
  56.             [2] => stdClass Object
  57.                 (
  58.                     [id] => 16
  59.                     [name] => Дополнения
  60.                     [parent] => 0
  61.                 )
  62.  
  63.             [3] => stdClass Object
  64.                 (
  65.                     [id] => 11
  66.                     [name] => Категория порше
  67.                     [parent] => 0
  68.                 )
  69.  
  70.             [4] => stdClass Object
  71.                 (
  72.                     [id] => 1
  73.                     [name] => Кухни
  74.                     [parent] => 0
  75.                 )
  76.  
  77.             [5] => stdClass Object
  78.                 (
  79.                     [id] => 12
  80.                     [name] => Офис
  81.                     [parent] => 0
  82.                 )
  83.  
  84.             [6] => stdClass Object
  85.                 (
  86.                     [id] => 2
  87.                     [name] => Спальни
  88.                     [parent] => 0
  89.                 )
  90.  
  91.             [7] => stdClass Object
  92.                 (
  93.                     [id] => 17
  94.                     [name] => Фурнитура
  95.                     [parent] => 0
  96.                 )
  97.  
  98.             [8] => stdClass Object
  99.                 (
  100.                     [id] => 13
  101.                     [name] => Шкафы
  102.                     [parent] => 0
  103.                 )
  104.  
  105.         )
  106.  
  107.     [3] => Array
  108.         (
  109.             [0] => stdClass Object
  110.                 (
  111.                     [id] => 5
  112.                     [name] => Деревянная спальня
  113.                     [parent] => 3
  114.                 )
  115.  
  116.             [1] => stdClass Object
  117.                 (
  118.                     [id] => 6
  119.                     [name] => Пластиковая спальня
  120.                     [parent] => 3
  121.                 )
  122.  
  123.         )
  124.  
  125.     [2] => Array
  126.         (
  127.             [0] => stdClass Object
  128.                 (
  129.                     [id] => 4
  130.                     [name] => Спальня взрослая
  131.                     [parent] => 2
  132.                 )
  133.  
  134.             [1] => stdClass Object
  135.                 (
  136.                     [id] => 3
  137.                     [name] => Спальня детская1
  138.                     [parent] => 2
  139.                 )
  140.  
  141.         )
  142.  
  143. )
  144.  


А вот результат работы рекурсии с этим массивом:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     Ворота
  3.     Гарнитуры
  4.     Дополнения
  5.     Категория порше
  6.     Кухни
  7.         !!!_Новая категория
  8.         !!!_Новая категория
  9.         444
  10.     Офис
  11.     Спальни
  12.         Спальня взрослая
  13.         Спальня детская1
  14.             Деревянная спальня
  15.                 !!!_Новая категория
  16.             Пластиковая спальня
  17.     Фурнитура
  18.     Шкафы
  19.  
 
 Top
OrmaJever Модератор
Отправлено: 19 Апреля, 2013 - 13:36:51
Post Id



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


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


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




ну я хотел увидеть ещё запрос и цикл выборки в котором формируется масив $tree, его явно придётся изменить


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 14:54:19
Post Id



Новичок


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


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




OrmaJever пишет:
ну я хотел увидеть ещё запрос и цикл выборки в котором формируется масив $tree, его явно придётся изменить


это само собой надо сформировать новый массив для данной операции,
вопрос в том, как сделать рекурсию в обратку?
я делаю 1 рапрос к БД, а дальше оперирую только с массивами.
 
 Top
LIME
Отправлено: 19 Апреля, 2013 - 17:39:18
Post Id


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


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


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




Saymor погугли как хранятся деревья в реляционной бд
меньше будет циклов и рекурсий
(Добавление)
nested sets, materialized path
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 18:40:25
Post Id



Новичок


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


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




LIME пишет:
Saymor погугли как хранятся деревья в реляционной бд
меньше будет циклов и рекурсий
(Добавление)
nested sets, materialized path

гуглил, "id", "parent", "info" идеальный вариант

(Отредактировано автором: 19 Апреля, 2013 - 18:41:24)

 
 Top
LIME
Отправлено: 19 Апреля, 2013 - 18:43:17
Post Id


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


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


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




ну ...дело твое))
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 22:04:33
Post Id



Новичок


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


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




LIME пишет:
ну ...дело твое))

"id", "parent", "info" это же работает в выводе рекурсивно сложенных каталогов без ограничений.
я уверен что можно как-то сделать Навигационную цепочку без дополнительных параметров в БД
 
 Top
LIME
Отправлено: 19 Апреля, 2013 - 22:05:43
Post Id


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


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


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




дополнительные поля лучше чем цикл запросов
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 23:07:11
Post Id



Новичок


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


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




LIME пишет:
дополнительные поля лучше чем цикл запросов


стоп! о каком цикле запросов идет речь?!
запрос в моём случае всего один!
далее рекурсия работает только с массивом данных полученном при одноразовом запросе к БД
 
 Top
LIME
Отправлено: 19 Апреля, 2013 - 23:10:24
Post Id


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


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


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




окау
это лучше чем без надобности выбирать дерево целиком
(Добавление)
хотя конечно это сильно завит от размера
 
 Top
Saymor
Отправлено: 19 Апреля, 2013 - 23:29:08
Post Id



Новичок


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


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




LIME пишет:
окау
это лучше чем без надобности выбирать дерево целиком
(Добавление)
хотя конечно это сильно завит от размера


ну проблема-то актуальна Подмигивание
вы подскажете чего умного?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB