ФорумПрограммированиеPHP для идиотов → Не работает return в рекурсивной функции

Не работает return в рекурсивной функции

  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz Авг. 18, 2008, 2:45 д.п.

    Вот такая функция:

    function staticUrl($root_id,$dir=null) {

    $sql = "SELECT parent_id, mask FROM root WHERE root_id='{$root_id}'";
    $result = mysql_fetch_array(mysql_query($sql));

    // пакуем массив
    $dir .= $result['mask'];

    if($result['parent_id'] > 0) {
    $dir .= "-"; // разделитель
    staticUrl($result['parent_id'],$dir);
    }
    else {
    $arr = explode("-",$dir); // разделяем и запаковываем в массив
    $arr = array_reverse($arr); // переварачиваем массив

    // формируем url для записи в базу
    for($i = 0; count($arr) > $i; $i++) {
    @$url .= $arr[$i];
    if(count($arr)-1 > $i) $url .= "/";
    }

    return $url;
    }
    }

    $dir = staticUrl(8);
    echo $dir;


    Не возвращает значение переменной $url. Объясните почему.
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz Авг. 18, 2008, 2:50 д.п., спустя 4 минуты 26 секунд

    а условие само проходит ?
    всмысле в ЕЛСЕ вваливается ?
  • Viking

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz Авг. 18, 2008, 3:55 д.п., спустя 1 час 4 минуты 44 секунды

    я думаю, если в строке @$url .= $arr[$i]; убрать @ можно много интересного на эту тему узнать..
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 18, 2008, 4:53 д.п., спустя 58 минут 53 секунды

    есть два варианта

    1 не выполняеться условие if($result['parent_id'] > 0)
    2 нет ретурна return staticUrl($result['parent_id'],$dir);
  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz Авг. 18, 2008, 5:51 д.п., спустя 57 минут 12 секунд

    Кагда ставлю вместо return, echo $url, то строка выводиться.

    2 нет ретурна return staticUrl($result['parent_id'],$dir);

    Здесь не понял, если можно подробней
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 18, 2008, 6:01 д.п., спустя 10 минут 1 секунду

    ну у тебя получается вызов функции а результат ее выполнения ничему не присваиваеться

    его надо дальше вернуть а то получаеться что в последнем проходе когда $result['parent_id'] > 0 то у тебя просто ничего не возвращаеться в $dir = staticUrl(8);


    а вобще мне не нравиться как ты передаешь $dir внутрь рекурсии и там его изменяешь
    но это моё личное мнение
  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz Авг. 18, 2008, 6:13 д.п., спустя 12 минут 39 секунд


    а вобще мне не нравиться как ты передаешь $dir внутрь рекурсии и там его изменяешь
    но это моё личное мнение


    Как бы ты сделал? Мне тоже не очень нравится
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 18, 2008, 7:06 д.п., спустя 52 минуты 39 секунд


    $root_id = 8;
    $dir = array();

    do{
    $sql = "SELECT parent_id, mask FROM root WHERE root_id='{$root_id}'";
    list($root_id, $dir[]) = each(mysql_fetch_array(mysql_query($sql)))
    }while($root_id > 0)

    $url = implode("/",array_reverse($dir));


    как-то так
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 21, 2008, 1:02 п.п., спустя 3 дня 5 часов 55 минут

    блин такую красоту придумал, сократил код в три раза
    сам два дня горжусь а никто не заценил
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Авг. 21, 2008, 1:45 п.п., спустя 43 минуты 16 секунд

    Запрос в цикле или, тем более, в рекурсии, это ж пиздец =)
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 21, 2008, 1:49 п.п., спустя 4 минуты 18 секунд

    sap, так предложи лучшый вариант обхода списков смежности
  • Grohot

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz Авг. 29, 2008, 6:12 д.п., спустя 7 дней 16 часов 22 минуты

    А что быстрее работает цикл или рекурсия?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 29, 2008, 6:26 д.п., спустя 14 минут 21 секунду

    а что вкуснее, вилка или еж?
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Авг. 29, 2008, 6:31 д.п., спустя 4 минуты 29 секунд

    вилка или еж

    интересные у тебя вкусовые предпочтения
  • megabit

    Сообщения: 367 Репутация: N Группа: Кто попало

    Spritz Авг. 29, 2008, 6:34 д.п., спустя 3 минуты 21 секунду


    а что вкуснее, вилка или еж?

    еж на вилке

Пожалуйста, авторизуйтесь, чтобы написать комментарий!