dma84

dma84
Рейтинг
168
Регистрация
21.04.2009
Sitealert:
Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .
К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.

К слову говоря, этот код строит дерево неограниченной вложенности из линейного списка без рекурсии. Код взят из собственной системы, а не стырен откуда-либо. Если вы плохо разбираетесь в деревьях в реляционных базах, то не стоит здесь "блистать" умом.

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

Не думал, что выкладывая свой код, наткнусь на такое непонимание. Вот и помогай людям.

Sitealert:
Формируйте двухмерный массив и разбирайте его через двойной цикл.

А если вложенность больше? Рекурсия? Или не слышали о таком?

datum:
Есть таблица с полями:
Id | Rub_id | Sub_id | Rub_name | Sub_name

1 | 1 | 1 | Транспорт | Легковые
2 | 1 | 2 | Транспорт | Грузовые
3 | 2 | 3 | Строительство | Бетон
4 | 2 | 4 | Строительство | Штукатурка
5 | 3 | 5 | Отдых | Отели

Каким вывести такой список по этой таблице:

Транспорт
- Лекговые
- Грузовые
Строительство
- Бетон
- Штукатурка
Отдых
- Отели

Что-то структура фиг поймёшь какая, почему бы не использовать обычный список смежности и не городить огород:

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;

На выходе ассоциативный массив в виде дерева разделов.

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

borisd:
А вы зря так... :) Если например в серьезном проекте придется работать с большими массивами данных, то что будете с пхп делать? Питон в отличие от пхп универсальный язык, там можно например подключить пакет numpy и создавать компактные массивы именно под те данные, которые используются, например если для каждого элемента достаточно одного байта, то именно соответствующий тип данных и можно задействать, а не выделять по 100-200 байтов для хранения каждого однобайтного элемента массива.

С большими массивами на PHP никто не работает, как минимум ограничивают выборку. Всё таки разные назначения у языков, а универсальность - не главное.

borisd:
Но больше всего в пхп мне не нравятся символы $$$ перед каждой переменной, эти значки сильно раздражают. Разве эти значки могут кому то нравиться???

В перле, например, массивы знаком "@" обозначаются, что, ИМХО, очень удобно.

Sly32:
ресурсы...Питон же их крайне экономно расходует, в отличие.

Феерично!...

Sly32:
Глупости. Ничуть не сложнее настройки php. Зато в итоге эффективность на Python в разы выше.

В каком месте?

kom09:
ASP.NET еще никто не предлагал. :)

Ассемблер, почему-то, тоже. Странно, не правда ли?

eklips007:
Тогда программно к переменной date добавить полдня :) делов-то.

Какой-то упоротый костыль вы предлагаете.

miketomlin:
Плюсую. Тоже об этом думал.

---------- Добавлено 03.10.2016 в 15:51 ----------

Только вот почему на vds работает? Хотя это могло быть раньше.

Да потому что УРЛы у сайта разные, на локалке 1 неверный редирект упал в кэш и привет.

Всего: 1660