[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рекурсия
hi3
Здравствуйте!

Определение функции

function menu_left_line($arr, $res, $id_parent = 0)
{
foreach ($arr as $val)
{
if ($val['id_parent'] == $id_parent)
{

//array_push($res, $val['name'].'<br>');
$res .= $val['name'].'<br>';
if (is_parent($arr, $val['id_catalog'])) menu_left_line($arr, $res, $val['id_catalog']);
//menu_left_line($arr, $res, $val['id_catalog']);

//echo '<pre>'; print_r($res); echo '</pre>'; die();


}
}


echo $res;

return $res;


ее вызов menu_left_line($arr, $arr_result);,
где $arr это массив исходных данных, $arr_result упорядоченный по определенному принципу массив результатов, который не получается, но если сделать вывод echo $res; то там получается все так как мне нужно.

Подскажите, как мне сформировать массив с результатами взамен echo $res;

Спасибо, надеюсь объяснил понятно, плохо понимаю рекурсию, а ide для php нормальной для трассировки не нашел)



Спустя 3 минуты, 44 секунды (12.09.2010 - 14:54) Michael написал(а):
function menu_left_line($arr, &$res, $id_parent = 0)

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

Спустя 4 минуты, 13 секунд (12.09.2010 - 14:58) hi3 написал(а):
Спасибо Вам большое))!

не подскажите еще, в переменную $level пишется глубина вхождения.

Тоесть но 3 к примеру уровня доходит верно. а обратно общитывается

function menu_left_line($arr, &$res, $id_parent = 0, $level = 0)
{
foreach ($arr as $val)
{
if ($val['id_parent'] == $id_parent)
{

$res[] = array("name"=>$val['name'], $level);
if (is_parent($arr, $val['id_catalog']))
{
menu_left_line($arr, $res, $val['id_catalog'], ++$level);

}

}
}
}


0
1
2
2
3 Дошли до максимальной глубины вложенности
3 А здесь должно быть уменьшение на один
2
1
1

Спустя 1 час, 40 минут, 56 секунд (12.09.2010 - 16:39) Michael написал(а):
Не совсем пойму, что ты делаешь. Но у тебя рекурсивный вызов в цикле.
Может тут:
menu_left_line($arr, $res, $val['id_catalog'], ++$level);

так сделать:
menu_left_line($arr, $res, $val['id_catalog'], $level + 1);

чтобы при итерациях(это ж горизонтальное измерение) глубина не менялась.

Спустя 3 часа, 23 минуты, 16 секунд (12.09.2010 - 20:02) hi3 написал(а):
Огромное ВАМ спасибо! Вы очень здорово помогли!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.