Forum Webscript.Ru

Программирование => PHP => Тема начата: Enemy от 18 Июня 2003, 13:49:47

Название: не могу найти баг
Отправлено: Enemy от 18 Июня 2003, 13:49:47

function getParameter($uid, $array, $parameterName, $count = NULL)
{
global $workClass;

if (!$count)
$array = $workClass->sortByFieldArray($array, "uid");
$value = $array[$uid][0][$parameterName];

if ($value) {echo \'"\'.$value.\'"\'; return $value;}

getParameter($array[$uid][0]["parent_uid"], $array, $parameterName, true);
}


//ВЫЗОВ ФУНКЦИИ
# get xsl template name
echo "(((". getParameter($array["uid"], $data, "xsl_template"). ")))";

//ВЫВОД----------------------------------------------
// видно что в функции echo \'"\'.$value.\'"\' - работает ("news.xsl"), а вот return не возращает $value. Почему??? Может кто поможет?...

// ВЫВОД НА СТРАНИЦЕ:

"news.xsl"((()))
Название: не могу найти баг
Отправлено: Enemy от 18 Июня 2003, 17:29:03
Господа програмеры помогите найти еррор. в моем скрипте. пожалуйста.

# рекурсивная функция, которая возвращает значение елемента массива, если оно есть. Если нет, функция смотрит есть ли такое значение выше - у parent:

function getParameter($uid, $array, $parameterName)
{
    $value = $array[$uid][0][$parameterName];
     
    # ЗДЕСЬ почемуто echo $value работает, а вот return - нет
    if ($value) {echo \'"\'.$value.\'"\'; return $value;}
         
        getParameter($array[$uid][0]["parent_uid"], $array, $parameterName);
}

// ВЫЗОВ ФУНКЦИИ
# get xsl template name
echo "(((". getParameter(11, $data, "xsl_template"). ")))";


// ВЫВОД НА СТРАНИЦЕ:

"news.xsl"((()))


# Вот мой массив $data:
[OFF]
Array
(
    [5] => Array
        (
           
                (
                    [uid] => 5
                    [parent_uid] => 0
                    [xsl_template] => news.xsl
                )

        )

    [10] => Array
        (
           
                (
                    [uid] => 10
                    [parent_uid] => 5
                    [xsl_template] => news.xsl
                )

        )

    [11] => Array
        (
           
                (
                    [uid] => 11
                    [parent_uid] => 10
                    [xsl_template] =>
                )

        )

)
[/OFF]
Название: не могу найти баг
Отправлено: Metaller от 18 Июня 2003, 18:01:58
Потому что у тебя для одиннадцатого элемента не определен xsl_template. Следовательно Value="" - IF не отрабатывает, идет рекурсия на 10 элемент.

Он выводится эхом. идет ретурн обратно из рекурсии, а там нет уже ретурна.. возвращает "НИЧТО" :-)
Доступно объяснил?

Я думаю, то что тебе надо решается так:

function getParameter($uid, $array, $parameterName)
{
    $value = $array[$uid][0][$parameterName];
     
    # ЗДЕСЬ почемуто echo $value работает, а вот return - нет
    if ($value) {echo \'"\'.$value.\'"\'; return $value;}
           
        return getParameter($array[$uid][0]["parent_uid"], $array, $parameterName);
}
Название: не могу найти баг
Отправлено: Enemy от 19 Июня 2003, 13:38:57
Metaller
супер :)