|
|
|
| Здравствуйте, знатоки Php!
У меня возник вопрос, над которым я ломаю голову второй день.
Есть список категорий, который выводится из базы MySQL с помощью рекурсивной функции, указанной здесь же на форуме. Для построения меню я использую .
Но возникает вопрос, как сделать, чтобы был отступ в виде указанного знака, если выводить всю структуру в выпадающем списке?
Я написал следующее:
function treeSelect($ids)
{
$query = "SELECT * FROM bbs_categories WHERE parentCatId = " . $ids . " ORDER BY prior";
$result = mysql_query($query);
while ( $print = mysql_fetch_array($result))
{
$ide = $print['catId'];
global $i;
if ($ids == 0)
{$i = 0;}
$i = $i + 1;
$nbsp = "•";
$otstup = str_repeat($nbsp, $i);
echo "<option value='{$print['catId']}'>{$otstup}".$print['catName']."</option>";
treeSelect($ide);
}
}
|
Но если для категории (самого высшего уровня) это работает, то в подкатегориях творится ужас. Рекурсия идет по порядку и все время добавляет 1 к $i, а мне нужно, чтобы она сообразила, что переходит от Покатегории1 ($i = 1) к ПодПодкатегории1 ($i =2), а потом к Подкатегории2 ($i =1) и т.д.
Как поймать закономерность за хвост? ;)
Спасибо всем откликнувшимся, я уже веревку мылю... | |
|
|
|
|
|
|
|
для: rised
(26.09.2006 в 18:00)
| | Веревку - для откликнувшихся?
function treeSelect($ids, $lev)
{
$query = "SELECT * FROM bbs_categories WHERE parentCatId = " . $ids . " ORDER BY prior";
$result = mysql_query($query);
while ( $print = mysql_fetch_array($result))
{
$ide = $print['catId'];
$nbsp = "•";
$otstup = str_repeat($nbsp, $lev);
echo "<option value='{$print['catId']}'>{$otstup}".$print['catName']."</option>";
treeSelect($ide, $lev+1);
}
}
treeSelect(0,0) ;
|
| |
|
|
|
|
|
|
|
для: Trianon
(26.09.2006 в 18:06)
| | Trianon!
Веревку мылил для себя, но Вы меня вытащили из петли! ;)
Искренне благодарю Вас! С чувством переполняющей радости, которая связана с освобождением от мук и страданий.
Это невероятно! Вы даже написали так, что вставил код - и все заработало, моей благодарности нет предела!
P.S. Вы не могли бы дать мне ссылку на подробное описание рекурсии, потому что в книге PHP 5 (первая часть) написано достаточно схематически. (или я просто не в состоянии понять)
Еще раз спасибо, Вы меня выручили! | |
|
|
|
|
|
|
|
для: rised
(26.09.2006 в 18:31)
| | При каждом вызове функции создается новый комплект переменных входных параметров (в Вашем случае это $ids и $lev) и всех переменных, которым присвиваются значения (в Вашем случае это $query, $result, $ide, $nbsp, $otstup). Этот комплект существует все время, пока выполняется код функции. При возврате из функции комплект уничтожается.
Так происходит и тогда, когда функция вызывает сама себя. В этом случае также создается новый комплект. Поэтому переменная $lev категории и переменная $lev подкатегории - это разные переменные. | |
|
|
|