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]   

> Описание: нужна рекурсия
Иван кали
Отправлено: 03 Апреля, 2017 - 09:49:19
Post Id


Новичок


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


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




всем привет! у меня меню построено так: достаем записи из бд(id, title, parent), из них строим массив, и его переделываем в дерево дописывая child.
получается такое дерево
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  [5] => Array
  3.         (
  4.             [category_id] => 5
  5.             [category_name] => корневой
  6.             [parent_id] => 0
  7.             [childs] => Array
  8.                 (
  9.                     [15] => Array
  10.                         (
  11.                             [category_id] => 15
  12.                             [category_name] => категория 1
  13.                             [parent_id] => 5
  14.                         )
  15.  
  16.                     [16] => Array
  17.                         (
  18.                             [category_id] => 16
  19.                             [category_name] => категория 2
  20.                             [parent_id] => 5
  21.                             [childs] => Array
  22.                                 (
  23.                                     [18] => Array
  24.                                         (
  25.                                             [category_id] => 18
  26.                                             [category_name] => категория 2.1
  27.                                             [parent_id] => 16
  28.                                         )
  29.  
  30.                                     [19] => Array
  31.                                         (
  32.                                             [category_id] => 19
  33.                                             [category_name] => категория 2.2
  34.                                             [parent_id] => 16
  35.                                         )))
  36.  


я пытаюсь при обращении к категории получить её детей

делаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. function childs($array, $category_id = 0) {
  3.    
  4. foreach ($array as $key) {
  5.         if ($key['category_id'] == $category_id) {
  6.             $data = $key['childs'];
  7.           }
  8. }
  9.     return $data;
  10. }
  11.  

и получаю список детей, но только с корневых списков, дальше надо как то рекурсию применить, но никак не получается. может кто подскажет?
уже хз сколько сижу, первая практика Огорчение

(Отредактировано автором: 03 Апреля, 2017 - 09:50:32)

 
 Top
andrewkard
Отправлено: 03 Апреля, 2017 - 16:19:48
Post Id


Участник


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


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




Не получается с рекурсией, делайте без, это же возможно.
 
 Top
Иван кали
Отправлено: 03 Апреля, 2017 - 16:44:09
Post Id


Новичок


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


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




andrewkard пишет:
Не получается с рекурсией, делайте без, это же возможно.


всё, сделал без неё )
решил с помощью запроса к базе
сначала достал id нужных категорий с простого массива
PHP:
скопировать код в буфер обмена
  1.  
  2. function list_category($array, $category_id){
  3.     if(!$category_id) return false;
  4.         foreach($array as $item){
  5.         if($item['parent_id'] == $category_id){
  6.         $data .= $item['category_id']  . ",";
  7.   }}
  8.     return $data;
  9. }


и потом с базы вытащил свои массивы

PHP:
скопировать код в буфер обмена
  1.  
  2. function childs($list_category = false){
  3.     if($list_category){
  4.         $query = "SELECT * FROM category WHERE category_id IN($list_category)";
  5.     }else{
  6.         $query = "SELECT * FROM category ";
  7.     }
  8.     $res = mysql_query($query) ;
  9.     $category = array();
  10.     while($row = mysql_fetch_assoc($res)){
  11.         $category] = $row;
  12.     }
  13.     return $category
  14. }


но с массивом было бы интересно разобраться )
спасибо за внимание )


Отредактировано модератором: Строитель, 03 Апреля, 2017 - 16:53:02
Подправил bb-код (для корректной подсветки)
 
 Top
quad
Отправлено: 03 Апреля, 2017 - 18:22:13
Post Id



Новичок


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


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




Иван кали пишет:
всем привет! у меня меню построено так: достаем записи из бд(id, title, parent), из них строим массив, и его переделываем в дерево дописывая child.
получается такое дерево
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  [5] => Array
  3.         (
  4.             [category_id] => 5
  5.             [category_name] => корневой
  6.             [parent_id] => 0
  7.             [childs] => Array
  8.                 (
  9.                     [15] => Array
  10.                         (
  11.                             [category_id] => 15
  12.                             [category_name] => категория 1
  13.                             [parent_id] => 5
  14.                         )
  15.  
  16.                     [16] => Array
  17.                         (
  18.                             [category_id] => 16
  19.                             [category_name] => категория 2
  20.                             [parent_id] => 5
  21.                             [childs] => Array
  22.                                 (
  23.                                     [18] => Array
  24.                                         (
  25.                                             [category_id] => 18
  26.                                             [category_name] => категория 2.1
  27.                                             [parent_id] => 16
  28.                                         )
  29.  
  30.                                     [19] => Array
  31.                                         (
  32.                                             [category_id] => 19
  33.                                             [category_name] => категория 2.2
  34.                                             [parent_id] => 16
  35.                                         )))
  36.  


я пытаюсь при обращении к категории получить её детей

делаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. function childs($array, $category_id = 0) {
  3.    
  4. foreach ($array as $key) {
  5.         if ($key['category_id'] == $category_id) {
  6.             $data = $key['childs'];
  7.           }
  8. }
  9.     return $data;
  10. }
  11.  

и получаю список детей, но только с корневых списков, дальше надо как то рекурсию применить, но никак не получается. может кто подскажет?
уже хз сколько сижу, первая практика Огорчение

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. function childs($array, $category_id = 0) {
  3. $data='';
  4. foreach ($array as $key) {
  5.                         if ($key['category_id'] == $category_id) {
  6.                         $data.= $key['category_id'];
  7.                         $data.= $key['category_name'];
  8.                         $data.= $key['parent_id'];
  9.                         foreach ($key['childs'] as $key1) {
  10.                         $data.=$key1['category_id'];
  11.                         $data.=$key1['category_name'];
  12.                         $data.=$key1['parent_id'];
  13.                         if(isset($key1['childs'])) {
  14.                         foreach ($key1['childs'] as $key2) {
  15.                         $data.=$key2['category_id'];
  16.                         $data.=$key2['category_name'];
  17.                         $data.=$key2['parent_id'];
  18.                         }
  19.                         }
  20.                         }
  21.                         }
  22.                         }
  23.     return $data;
  24. }
  25.  
 
 Top
Строитель Модератор
Отправлено: 03 Апреля, 2017 - 18:34:57
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Иван кали пишет:
дальше надо как то рекурсию применить, но никак не получается. может кто подскажет?
Для того, что бы вам было проще понять принцип работы рекурсивной функции, вам нужно взять массив по проще (с меньшей глубиной вложенности). Я набросал простой пример, думаю - разберётесь
Спойлер (Отобразить)
 
 Top
Иван кали
Отправлено: 12 Апреля, 2017 - 07:20:25
Post Id


Новичок


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB