为什么"返回"关于PHP函数是不是停止了进程?

时间:2014-06-30 01:25:15

标签: php return

我不明白为什么"返回"我没有停止在我创建的函数中的过程来搜索PHP中的multi_level数组上的值。 这是代码:

static function in_array_multi($needle, $haystack) {

            foreach ($haystack as $item) {                
                if(is_array($item)){
                    in_array_multi($needle, $item);
                }
                else{
                    if ($item === $needle) {
                        return "ok";
                    }
                }
            }
            return "nok";    

    } 

我使用这个数组作为例子:

$arr = array(0 => array(id=>1,name=>"cat 1"),
             1 => array(id=>2,name=>"cat 2"),
             2 => array(id=>3,name=>array(id=>7,name=>"cat 7"))
             );

我正在调用这样的函数:

echo in_array_multi("cat 1",$arr);

它正在回归" nok"。 我正在使用xdebug来跟踪这个过程。它应该在第二轮停止进程。 有人知道发生了什么事吗? 谢谢

2 个答案:

答案 0 :(得分:1)

因为你使函数返回将停止循环,你应该收集它并在最后返回。

也许你想要这个..

function array_multiple_search($array, $key, $value=null) {
    $return = array();
    if (is_array($array)) {
        if (isset($array[$key])) {
            if (is_null($value)) {
                $return[] = $array;
            } elseif ($array[$key] == $value) {
                $return[] = $array;
            }
        }
        foreach ($array as $subarray) {
            $return = array_merge($return, array_multiple_search($subarray, $key, $value));
        }
    }
    return $return;
}

param 1是目标数组

param 2是您要搜索目标数组的键

param 3是您要使用目标数组的键搜索的值(可以为null)

此函数将收集并返回一组合格的数据。

答案 1 :(得分:1)

我的评论有点粗心。如果递归实际找到值,您只想直接从递归返回。你可以做到

function in_array_multi($needle, $haystack) {
    foreach ($haystack as $item) {                
        if(is_array($item)){
            if ('ok' === in_array_multi($needle, $item)) {
                return 'ok';
            }
        }
        elseif ($item === $needle) {
            return "ok";
        }
    }
    return "nok";
}