PHP递归数组搜索

PHP递归数组搜索,php,recursion,multidimensional-array,Php,Recursion,Multidimensional Array,我使用以下函数递归搜索数组: function search2($array, $key){ if( array_key_exists($key, $array) ){ print("<br> ----------------- FOUND <u>{$key}</u> with value: {$array[$key]}"); return array( $key => $array[$key] );

我使用以下函数递归搜索数组:

function search2($array, $key){
    if( array_key_exists($key, $array) ){
        print("<br> ----------------- FOUND <u>{$key}</u> with value: {$array[$key]}");

        return array( $key => $array[$key] );

    }else if( !array_key_exists($key, $array) ){
        foreach ($array as $index   =>  $subarray){
                if( is_array($subarray) ){
                    print("<br> ************* <u>{$index}</u> is an ARRAY");
                    print("<br> ************* RE-SEACHING <u>{$index}</u> FOR : <u>{$key}</u>");
                    search2($subarray, $key);
                }
        }
    }
}
我的函数将不断调用自己,直到找到我正在搜索的索引为止。如果我搜索的是email_address,If语句的第一部分应该返回该索引的值(如果该数组键存在),否则它将在代码的第二部分进入递归模式

问题是代码似乎正常工作,因为我得到了如下所示的“find”打印输出语句:

print("<br> ----------------- FOUND <u>{$key}</u> with value: {$array[$key]}");
print(
--------------找到值为{$array[$key]}的{$key});

但是,我希望return语句能够完成它应该完成的任务,但在函数调用时没有得到任何输出。

您必须返回找到的值,因此请更改:

search2($subarray, $key);
致:


使用递归数组内函数:

function in_array_r ( $needle, $haystack, $strict = true )
    {
        foreach ( $haystack as $value )
        {
            if (( $strict ? $value === $needle : $value == $needle ) || ( is_array ( $value ) && in_array_r ( $needle, $value, $strict )))
            {
                return true;
            }
        }

        return false;
    }

此函数将继续循环,直到找到您要查找的密钥。

您也可以使用提供回调的内置函数。

非常感谢。我知道我忽略了一些重要的东西。这个函数只给出一个值。如何获取多个值。我已将return true to替换为return$key。
return search2($subarray, $key);
function in_array_r ( $needle, $haystack, $strict = true )
    {
        foreach ( $haystack as $value )
        {
            if (( $strict ? $value === $needle : $value == $needle ) || ( is_array ( $value ) && in_array_r ( $needle, $value, $strict )))
            {
                return true;
            }
        }

        return false;
    }