Рекурсивная функция: эхо работает, возврат не работает - PullRequest
0 голосов
/ 08 марта 2012

Функция нацелена на поиск элемента в диапазоне массивов, а затем возврат его ключа.

Проблема в том, что функция ничего не возвращает, тогда как она будет отображать ожидаемый результат ... Вот мой код:

function listArray($tb, $target){
    foreach($tb as $key => $value){
        if(is_array($value)){ // current value is an array to explore
            $_SESSION['group'] = $key; // saving the key in case this array contains the searched item
            listArray($value, $target);
        }else {
            if ($target == $value) { // current value is the matching item
                return $_SESSION['group']; //Trying to return its key
                break; // I'd like to close foreach as I don't need it anymore
                }
        }
    }
}

Кстати, другая мелочь: я не привык к рекурсивной функции, и я не нашел другого решения, кроме как использовать переменную сеанса. Но может быть более хороший способ сделать это, поскольку я не использую эту переменную сеанса в другом месте ...

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Вам нужно return перед повторным listArray звонком.

Спасибо за это ..

return;
break;

То, что break никогда не достигается (я не верюв любом случае вы можете использовать break для выхода из функции в php)

Второй return возвращается из рекурсивного вызова.Скажем, это не две отдельные функции:

function foon() {
   barn();
}
function barn() {
   return true;
}

foon не имеет оператора возврата.

0 голосов
/ 09 марта 2012

Я наконец-то обошел проблему, сохранив свой результат в переменной $_SESSION.

Итак, больше нет return ...

$_SESSION['item'][$target] = $_SESSION['group'];
...