为什么;return";关于PHP函数是否停止进程?

为什么;return";关于PHP函数是否停止进程?,php,return,Php,Return,我不明白为什么“return”不停止这个函数中的进程,我创建这个函数是为了在PHP的多级数组中搜索一个值。 代码如下: static function in_array_multi($needle, $haystack) { foreach ($haystack as $item) { if(is_array($item)){ in_array_multi($need

我不明白为什么“return”不停止这个函数中的进程,我创建这个函数是为了在PHP的多级数组中搜索一个值。 代码如下:

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来遵循这个过程。它应该在第二轮停止这一进程。 有人知道发生了什么事吗?
谢谢

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

也许你想要这个

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)


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

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

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";
}

当您在\u array\u multi中的
上重复出现时,您不会返回。更改数组中的
\u multi($needle,$item)
返回到数组中的多($needle,$item)你好kojiro,你的建议使代码工作,但我认为我的代码中有一个错误。现在,函数不会通过所有数组。例如,如果我查找第7类。它返回nok。你能看到错误在哪里吗?哈,是的,对不起,我有点粗心。我在下面创造了一个更好的答案。