递归函数不会在返回时终止

时间:2018-10-05 14:57:34

标签: php recursion multidimensional-array

<?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)找不到任何内容。为什么发现值从true变为false。为什么在$ section == $ query时函数不终止?

1 个答案:

答案 0 :(得分:-1)

尝试一下

$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

Sandbox

您是[-]亲密朋友,大声笑。

您也可以这样:

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

然后让函数末尾的return捕获它。你的选择。可以将其视为一堆函数调用(因为这就是函数调用)。您必须将结果返回整个堆栈,以便它可以从第一次调用(发生输出的位置)返回。

干杯!