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]   

> Без описания
kamwork
Отправлено: 19 Апреля, 2014 - 18:37:27
Post Id


Новичок


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


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




Всем привет! Воюю с категориями Улыбка

Не могу осилить перегон многоуровневого массива в одноуровневый для перезаписи в БД.

На входе получаю данные через POST:

CODE (html):
скопировать код в буфер обмена
  1. [{"id":13,"children":[{"id":14}]},{"id":15,"children&qu ot;:[{"id":16,"children":[{"id":17}]},{"id":18}]}]


Преобразую в массив:

PHP:
скопировать код в буфер обмена
  1. $list = $_POST['output_data'];
  2. $result = json_decode($list,true);


Получаю:

PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [id] => 13
  5.             [children] => Array
  6.                 (
  7.                     [0] => Array
  8.                         (
  9.                             [id] => 14
  10.                         )
  11.                 )
  12.         )
  13.  
  14.     [1] => Array
  15.         (
  16.             [id] => 15
  17.             [children] => Array
  18.                 (
  19.                     [0] => Array
  20.                         (
  21.                             [id] => 16
  22.                             [children] => Array
  23.                                 (
  24.                                     [0] => Array
  25.                                         (
  26.                                             [id] => 17
  27.                                         )
  28.                                 )
  29.                         )
  30.  
  31.                     [1] => Array
  32.                         (
  33.                             [id] => 18
  34.                         )
  35.                 )
  36.         )
  37. )



Хочу получить такой:

PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [id] => 13
  5.             [parent] => 0
  6.             [sort] => 1
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [id] => 14
  12.             [parent] => 13
  13.             [sort] => 1
  14.         )
  15.     [2] => Array
  16.         (
  17.             [id] => 15
  18.             [parent] => 0
  19.             [sort] => 2
  20.         )
  21.     [3] => Array
  22.         (
  23.             [id] => 16
  24.             [parent] => 15
  25.             [sort] => 1
  26.  
  27.         )
  28.     [4] => Array
  29.         (
  30.             [id] => 17
  31.             [parent] => 16
  32.             [sort] => 1
  33.  
  34.         )
  35.     [5] => Array
  36.         (
  37.             [id] => 18
  38.             [parent] => 15
  39.             [sort] => 2
  40.  
  41.         )
  42.  



После чего записать это все в БД, вернее переписать.

Понял, что нужно делать через рекурсии, но нифига не выходит Недовольство, огорчение

Пока просто через echo вывожу, пытаюсь сформировать то, что нужно.


Получилась у меня такая функция:

PHP:
скопировать код в буфер обмена
  1. save_menu($result);
  2.  
  3.  function save_menu ($menu_array, $parent = 0) {
  4.  
  5.  foreach ($menu_array as $ellement) {
  6.  
  7. //тут  [parent_id] выводится вроде бы верно
  8.  
  9.         if ($parent)
  10.                 echo '<br /> [parent_id]:' . $parent;
  11.  
  12.     if (is_array($ellement)) {
  13.         save_menu($ellement, $menu_array['id']);
  14.     }                  
  15.     else {
  16.         echo '<br /> [id]:' . $ellement;
  17.  
  18.  // а здесь он почему то не хочет быть..
  19.         echo '<br /> [parent_id]:' . $parent;  
  20.         echo '<br>--------------------------';
  21.     }
  22.   }
  23. }



По итогу выводится так:

[id]:13
[parent_id]:
--------------------------
[id]:15
[parent_id]:
--------------------------
[parent_id]:15
[id]:16
[parent_id]:
--------------------------
[parent_id]:16
[id]:17
[parent_id]:
--------------------------
[parent_id]:17
[id]:18
[parent_id]:
--------------------------
[parent_id]:16
[id]:14
[parent_id]:
--------------------------



Сортировки пока вообще не осилил как вытягивать.

Может кто подскажет пути решения?

Везде информация о том, как извлекать из БД и создавать дерево категорий, но не обратный процесс Недовольство, огорчение
 
 Top
Edwvee
Отправлено: 21 Апреля, 2014 - 10:01:20
Post Id


Частый гость


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


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




Если нужно отсортировать массив по своему, есть функция usort, вы получается хотите по id отсортировать.
PHP:
скопировать код в буфер обмена
  1. usort($arr, function ($a, $b)
  2. {
  3.     if ($a['id'] > $b['id'])
  4.         return 1;
  5.  
  6.     if ($a['id'] < $b['id'])
  7.         return -1;
  8.  
  9.     return 0;
  10. });


Все просто работает.

(Отредактировано автором: 21 Апреля, 2014 - 10:02:28)

 
 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