К слову говоря, этот код строит дерево неограниченной вложенности из линейного списка без рекурсии. Код взят из собственной системы, а не стырен откуда-либо. Если вы плохо разбираетесь в деревьях в реляционных базах, то не стоит здесь "блистать" умом.
У ТС изначально структура шлаковая, на что был предложен хороший рабочий вариант, который не устроил пока только вас. Вы можете и дальше говнякать вволю.
Не думал, что выкладывая свой код, наткнусь на такое непонимание. Вот и помогай людям.
А если вложенность больше? Рекурсия? Или не слышали о таком?
Что-то структура фиг поймёшь какая, почему бы не использовать обычный список смежности и не городить огород:
Id | Rub_id - не одно и то же?
Rub_name | Sub_name - это зачем?
Для обычного списка смежности всё очень просто:
$res = mysql_query('SELECT `id`, `parent_id`, `name` FROM `sections` ORDER BY `pos`');$tree = [['children' => []]];$references = [&$tree[0]];while($item = mysql_fetch_assoc($res)){ if(isset($references[(int)$item['id']])) $item['children'] = $references[(int)$item['id']]['children']; $references[(int)$item['parent_id']]['children'][] = $item; $references[(int)$item['id']] = &$references[(int)$item['parent_id']]['children'][count($references[(int)$item['parent_id']]['children']) - 1];}$references = null;$sections_tree = $tree[0]['children'];$tree = null;
На выходе ассоциативный массив в виде дерева разделов.
А как быть с производными, которыми каждую минуту пополняется великий и могучий?
С большими массивами на PHP никто не работает, как минимум ограничивают выборку. Всё таки разные назначения у языков, а универсальность - не главное.
В перле, например, массивы знаком "@" обозначаются, что, ИМХО, очень удобно.
Феерично!...
В каком месте?
Ассемблер, почему-то, тоже. Странно, не правда ли?
Какой-то упоротый костыль вы предлагаете.
Да потому что УРЛы у сайта разные, на локалке 1 неверный редирект упал в кэш и привет.