Определение функции
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 к примеру уровня доходит верно. а обратно общитывается
0
1
2
2
3 Дошли до максимальной глубины вложенности
3 А здесь должно быть уменьшение на один
2
1
1
не подскажите еще, в переменную $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 написал(а):
Огромное ВАМ спасибо! Вы очень здорово помогли!