Ишь какой умный Яндекс. По всем запросам, задать которые можно только накурившись, Яндекс специально генерит смешную выдачу :)
-Ольга-, здоровый образ жизни добавил
Адепт, Создание сайтов есть в Hi-Tech/Интернет, а графический дизайн подумаю куда пихнуть.
Адепт, стоматология Есть (Наука/Медицина/Стоматология).
А дизайн вы какой имете в виду?
Спасибо, сделано.
я второй!
Правильно ли я понял, что Minimus от Strandart отличается лишь тем, что во втором анкоры вы придумываете сами?
Исходный массив $list
Получаем $array
Да, задача не тривиальная :) Тоже пришлось побиться минут 15.
Самый логичный, казалось бы путь - пройтись по линейному списку и дать каждому элементу parent_id, а зетем уже конвертировать в дерево с момощью рекурсии.
Но есть более быстродействиенный метод:
$array = array ();$way = array();$lastlevel = 1;$cnt = 0;foreach ($list as $id=>$item) { if ($item['level'] > $lastlevel) { $way[] = $id; } else if ($item['level'] == $lastlevel) { if ($cnt > 0) { array_pop($way); } $way[] = $id; } else { array_pop($way); array_pop($way); $way[] = $id; } $lastlevel = $item['level']; $str = '$array'; $wcnt = 0; foreach ($way as $id) { $str .= (($wcnt > 0)?'[\'tree\']':'') . "[{$id}]"; $wcnt ++; } $str .= ' = $item;'; eval($str); $cnt ++;}
Тут приходится прибегать к функции eval() - это сильно усложняет чтение кода и портит его логику. Программисты не любят эту функцию. Но использовать здесь рекурсию, имхо, еще хуже :)
В общем, идея такая: мы пробегаемся по списку и для каждого элемента генерим строку вроде
$array[3]['tree'][4]['tree'][5] = $item;
а затем заставляем интерпретатор отработать эту строку с помощью eval().
В массиве $way мы храним номера родительских элементов. То есть 3, 4, 5. Если level текущего элемента больше level прошлого элемента, добавляем к этому массиву номер текущего элемента. Если они равны - убираем один и заменяем его новым. Если level текущего элемента меньше, чем level прошлого, убираем два номера и добавляем текущий.
Скрипт работает. Проверил.
Только для простоты ключами многоуровневого массива сделал id элементов. Но это вам, я думаю, несущественно.
Я помню http://nic.ru/whois/, но не запомнил бы http://nic.ru/?page=whois
Помню http://artlebedev.ru/kovodstvo/, но не запомнил бы http://artlebedev.ru/?id=5
это для примера.
У ЧПУ есть еще два навигационных преимущества:
1) Наведя на ссылку мышью, можно посмотреть в статусбар и понять, куда эта ссылка ведет.
2) Чтобы подняться в структуре сайта на один раздел выше, достаточно удалить все после соответствующего слэша. На некоторых сайтах это не продумано - но это ошибка реализации ЧПУ, а не самой идеи.
Владимир-C, если вы мокупаете ссылки для ТИЦа, то вы верно рассуждаете.