Вот так я вывожу категории до третьего уровня вложености:
<select name="c_id" class="al-l">
<option value="0">Начало</option>
<?php foreach ($categories as $key => $value): if ($value['cid'] == 0): ?>
<option value="<?=$key;?>"> <?=$value['name'];?></option>
<?php foreach ($categories as $key2 => $value2): if ($value2['cid'] == $key): ?>
<option value="<?=$key2;?>"> - <?=$value2['name'];?></option>
<?php foreach ($categories as $key3 => $value3): if ($value3['cid'] == $key2): ?>
<option value="<?=$key3;?>"> - <?=$value3['name'];?></option>
<?php endif; endforeach; ?>
<?php endif; endforeach; ?>
<?php endif; endforeach; ?>
</select>
=================
Может посоветуете как лучше сделать? Потому что мой гк как-то не очень устраивает. И если вложенность больше - пример выше, не вариант чтобы его использовать
Тема сложная, напрямую зависит от задачи.
Если тебе не нужно 25 уровней вложенности, не надо городить бесконечную вложенность. Проверено.
Число элементов считать заипешся, удаление и изменение будут тормозными и сложными.
При ограниченной вложенности эти операции сильно упрощаются.
Итого: все зависит от задачи.
Diversant, Пускай будет ограниченой вложенности. например: максимум 3-го уровня
11 Июл 2012, 14:49Шаг №1: Извлекаем все категории из БД.
$query = mysql_query('SELECT * FROM `cat` ORDER BY `name`');
Шаг №2: Присваеваем переменной-массиву эти категории
$result = array();
while ($cat = mysql_fetch_array($query)) {
$result[$cat['id']] = array('name' => $cat['name'], 'cid' => $cat['cid']);
}
Единственный плюс неограниченной вложенности - милый адрес вида ololo.php/?id=5374.
И то, короткий ид в таблице можно завести и при ограниченной вложенности