Рекурсивный алгоритм, помогите с глубиной

vonica

Новичок
Рекурсивный алгоритм, помогите с глубиной

Имеем массив:
Код:
Array
(
    [0] => Array
        (
            [catId] => 2
            [catTitle] => Магазины
            [catPid] => 0
            [catLogo] => 
            [catPriority] => 0
            [nodes] => Array
                (
                    [0] => Array
                        (
                            [catId] => 3
                            [catTitle] => Продукты питания
                            [catPid] => 2
                            [catLogo] => 
                            [catPriority] => 0
                            [nodes] => Array
                                (
                                    [0] => Array
                                        (
                                            [catId] => 1
                                            [catTitle] => Диетическое питание
                                            [catPid] => 3
                                            [catLogo] => 
                                            [catPriority] => 0
                                        )

                                    [1] => Array
                                        (
                                            [catId] => 7
                                            [catTitle] => Детское питание
                                            [catPid] => 3
                                            [catLogo] => 
                                            [catPriority] => 0
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [catId] => 4
                            [catTitle] => Одежда
                            [catPid] => 2
                            [catLogo] => 
                            [catPriority] => 0
                        )

                    [2] => Array
                        (
                            [catId] => 8
                            [catTitle] => Бытовая техника
                            [catPid] => 2
                            [catLogo] => 
                            [catPriority] => 0
                        )

                )

        )

    [1] => Array
        (
            [catId] => 5
            [catTitle] => Производители
            [catPid] => 0
            [catLogo] => 
            [catPriority] => 0
            [nodes] => Array
                (
                    [0] => Array
                        (
                            [catId] => 6
                            [catTitle] => Мебель
                            [catPid] => 5
                            [catLogo] => 
                            [catPriority] => 0
                        )

                )

        )

)
вывод с помощью этой функции

PHP:
function print_array($ar)
{
	static $count; 

	if (is_array($ar)) $count = (isset($count)) ? ++$count : 0;

	if (!is_array($ar)) { return; }
	
	while(list($k, $v) = each($ar)) 
	{
		if ($k=='catTitle') $catTitle=$v;
		if ($k=='catPid' && (!is_array($v))) echo "<option value='$v'>".str_repeat("-", $count).$catTitle.$count."</options><br>";
		if ($k=='nodes' and $v=='Array') --$count;
		if (is_array($v))
		{
			print_array($v);
		}
	}
$count--;
}
Получается такой вот результат:

-Магазины
---Продукты питания
-----Диетическое питание
-----Детское питание
---Одежда
---Бытовая техника
-Производители
---Мебель

А хотелось бы вот так
Магазины
--Продукты питания
---Диетическое питание
---Детское питание
--Одежда
--Бытовая техника
Производители
--Мебель

Подскажите плиз, что подправить в функции, чтобы так получилось.

Заранее спасибо!
 

Pigmeich

Новичок
Парень рекурсию не умеет писать.

Что толку ошибку индийскими методами исправлять?
 

zerkms

TDD infected
Команда форума
гхм... а зачем $count статичный??? почему бы его не сделать аргументом, "как всегда" ?
 

vonica

Новичок
Я так делал, но тоже не то, все равно вложенности получаются неправильно:
Магазины
--Продукты питания
----Диетическое питание
----Детское питание
--Одежда
--Бытовая техника
Производители
--Мебель

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

kruglov

Новичок
Правильный ответ озвучен - правильной идеей будет строить рекурсию так, чтобы count тоже передавался аргументом функции, print_array($ar, $count)
 
Сверху