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 » » Если скрипт не работает » Рекурсивная функция не записывает в массив подкатегории

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

1. CandyDandy - 07 Октября, 2011 - 17:40:27 - перейти к сообщению
Конечно скорее всего это я делаю что то неправильно )
Функция отлично выводит(структурирует) категории (id) и подкатегории(under_id) с неограниченным количеством вложений из массива.
Но теперь мне нужно записать всё структурированное меню в новый массив $category.
На месте где сейчас запись $category[$count] = array (.. и т.п. был echo который отлично и по порядку всё выводил.
Но в массив он записывает только категории первого уровня(under_id - 0)! Почему так происходит и как это исправить?
PHP:
скопировать код в буфер обмена
  1. // Показывает все объекты массива по его номеру подкатегории (under_id)
  2.         function isset_under_id($cat_array, $this_under_id)
  3.         {
  4.             foreach ($cat_array as $row)
  5.             {
  6.                 $id            = $row['id'];       // id объекта
  7.                 $under_id      = $row['under_id']; // подкатегория объекта
  8.                 $name          = $row['name'];     // название объекта
  9.  
  10.                 if ($under_id == $this_under_id)
  11.                 {
  12.                     return true;
  13.                 }
  14.             }
  15.         }
  16.  
  17.         // Показывает все объекты массива по его номеру подкатегории (under_id)
  18.         function menu($cat_array, $this_under_id)
  19.         {
  20.             $s = 1;
  21.  
  22.             foreach ($cat_array as $row)
  23.             {
  24.                 $id            = $row['id'];       // id объекта
  25.                 $under_id      = $row['under_id']; // подкатегория объекта
  26.                 $name          = $row['name'];     // название объекта
  27.  
  28.                 if ($under_id == $this_under_id)
  29.                 {
  30.                     static $i = -1;
  31.                     if ($s == 1) {$i++; $s = 2;}
  32.  
  33.                     static $count = 0; $count++; // номер текущего вывода
  34.  
  35.                     // echo $count,'lvl- ',$i,'',$name,'- ',$id,'- ',$under_id,'<br>';
  36.  
  37.                     $categories[$count] = array(
  38.                         'lvl' => $i,
  39.                         'id' => $id,
  40.                         'under_id' => $under_id,
  41.                         'name' => $name
  42.                     );
  43.  
  44.                     if (!isset($cat_array[$count])) {echo'la fin'; return $categories; }
  45.  
  46.                     // если в массиве существует такой under_id -> вызови функцию заново
  47.                     if (isset_under_id($cat_array, $id))
  48.                     {
  49.                         menu($cat_array, $id);$i = 0;
  50.  
  51.                     }
  52.                     else
  53.                     {
  54.                         $n = 0;
  55.                     }
  56.                 }
  57.             }
  58.         }
  59.  
  60.         echo '<pre>';
  61.         print_r(menu($cat_array,0,0));
  62.         echo '</pre>';
  63.  


Выводит:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [1] => Array
  3.         (
  4.             [lvl] => 0
  5.             [id] => 4
  6.             [under_id] => 0
  7.             [name] => Мальчики
  8.         )
  9.  
  10.     [5] => Array
  11.         (
  12.             [lvl] => 0
  13.             [id] => 5
  14.             [under_id] => 0
  15.             [name] => Девочки
  16.         )
  17.  
  18.     [8] => Array
  19.         (
  20.             [lvl] => 0
  21.             [id] => 6
  22.             [under_id] => 0
  23.             [name] => Киборги
  24.         )
  25.  
  26. )
  27.  
  28. если делаю обычное echo выводит:
  29.  
  30. 1lvl- 0Мальчики- 4- 0
  31. 2lvl- 1Саша- 1- 4
  32. 3lvl- 1Вова- 3- 4
  33. 4lvl- 2Любит Машу- 8- 3
  34. 5lvl- 0Девочки- 5- 0
  35. 6lvl- 1Маша- 2- 5
  36. 7lvl- 2Не любит никого- 9- 2
  37. 8lvl- 0Киборги- 6- 0
  38. la fin


Как исправить? Что не так?
2. CandyDandy - 07 Октября, 2011 - 20:11:43 - перейти к сообщению
Просто массив надо было объявить глобально. Всем спасибо кто думал )))

 

Powered by ExBB FM 1.0 RC1