Рекурсивная функция не завершается при возврате - PullRequest
0 голосов
/ 05 октября 2018
<?php
$sections = ['test', 'nesto', 'fo', 'bar', ['obama', 'tito']];

function search($sections, $query){
    $found = false;

    foreach ($sections as $section){
        if ($section == $query){
            $found = true;
            var_dump($found);
            return $found;
        }

        if (is_array($section)){
            search($section, $query);
        }
    }

    var_dump($found);

    return $found;
}

if (search($sections, 'obama')){
    echo 'search item found';
}else{
    echo 'nothing found';
}

Я написал упрощенную версию своей проблемы.В основном я пытаюсь найти значение во вложенном массиве.Я получаю следующий вывод: bool (true) bool (false) ничего не найдено.Почему найденное значение изменяется с истинного на ложное.Почему функция не завершается, когда $ section == $ query?

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте это

$sections = ['test', 'nesto', 'fo', 'bar', ['obama', 'tito']];

function search($sections, $query){
    $found = false;

    foreach ($sections as $section){
        if ($section == $query){
            $found = true;
            var_dump($found);
            return $found;
        }

        if (is_array($section)){
            return search($section, $query); //add return here
        }
    }

    var_dump($found);

    return $found;
}

if (search($sections, 'obama')){
    echo 'search item found';
}else{
    echo 'nothing found';
}

Вы должны вернуть результат рекурсивного вызова.

Вывод

bool(true)
search item found

Песочница

Вы были этим [-] близко, лол.

Также вы, вероятно, могли бы сделать это следующим образом:

$found = search($section, $query);

И позволить возврату в конце функции его перехватить.Твой выбор.Думайте об этом как о стеке вызовов функций (потому что это то, что есть).Вы должны вернуть результат обратно через стек, чтобы он мог вернуться после первого вызова (где происходит ваш вывод).

Приветствия!

...