ФорумПрограммирование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

    Сообщения: 5299 Репутация: 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

    Сообщения: 5299 Репутация: 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

    Сообщения: 5299 Репутация: 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    вилка или еж

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

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

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


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

    еж на вилке

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