Функция отлично выводит(структурирует) категории (id) и подкатегории(under_id) с неограниченным количеством вложений из массива.
Но теперь мне нужно записать всё структурированное меню в новый массив $category.
На месте где сейчас запись $category[$count] = array (.. и т.п. был echo который отлично и по порядку всё выводил.
Но в массив он записывает только категории первого уровня(under_id - 0)! Почему так происходит и как это исправить?
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- // Показывает все объекты массива по его номеру подкатегории (under_id)
- function isset_under_id($cat_array, $this_under_id)
- {
- foreach ($cat_array as $row)
- {
- $id = $row['id']; // id объекта
- $under_id = $row['under_id']; // подкатегория объекта
- $name = $row['name']; // название объекта
- if ($under_id == $this_under_id)
- {
- return true;
- }
- }
- }
- // Показывает все объекты массива по его номеру подкатегории (under_id)
- function menu($cat_array, $this_under_id)
- {
- $s = 1;
- foreach ($cat_array as $row)
- {
- $id = $row['id']; // id объекта
- $under_id = $row['under_id']; // подкатегория объекта
- $name = $row['name']; // название объекта
- if ($under_id == $this_under_id)
- {
- static $i = -1;
- if ($s == 1) {$i++; $s = 2;}
- static $count = 0; $count++; // номер текущего вывода
- // echo $count,'lvl- ',$i,'',$name,'- ',$id,'- ',$under_id,'<br>';
- 'lvl' => $i,
- 'id' => $id,
- 'under_id' => $under_id,
- 'name' => $name
- );
- // если в массиве существует такой under_id -> вызови функцию заново
- if (isset_under_id($cat_array, $id))
- {
- menu($cat_array, $id);$i = 0;
- }
- else
- {
- $n = 0;
- }
- }
- }
- }
- echo '<pre>';
- echo '</pre>';