返回数组索引路径的PHP函数

返回数组索引路径的PHP函数,php,arrays,search,path,indexing,Php,Arrays,Search,Path,Indexing,我一直在尝试编写一个PHP函数,它在数组中搜索id索引valeus,一旦找到,就返回导致它被发现的路径 以以下数组为例: Array ( [0] => Array ( [id] => 1 [data] => Array ( [0] => Array (

我一直在尝试编写一个PHP函数,它在数组中搜索
id
索引valeus,一旦找到,就返回导致它被发现的路径

以以下数组为例:

    Array
(
    [0] => Array
        (
            [id] => 1
            [data] => Array
                (
                    [0] => Array
                        (
                            [id] => 8
                        )

                    [1] => Array
                        (
                            [id] => 9
                        )

                    [2] => Array
                        (
                            [id] => 10
                            [data] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 15
                                            [data] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 22
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [id] => 21
                                        )

                                )

                        )

                )

        )

)

如果查找
[id]=>21
它将返回
数组(1,10)
。然而,在无数次尝试中,我都失败了。设置路径应设置为索引
id
。然而,我无法理解。非常感谢您的指导。

此函数返回数组(0,'data',2,'data',1,'id'),例如OP(即值的完整路径)

函数,用于在数组中搜索
$key=>$value
对并返回路径:

function array_search_r($key, $value, $haystack, $strict = null) {
    $strict = $strict ?: false;
    if (is_array($haystack)) {
        foreach($haystack as $k => $v) {
            if ($strict ? ($k === $key && $v === $value) : ($k == $key && $v == $value)) return array($k);
            if(($path = array_search_r($key, $value, $v, $strict)) !== false) return array_merge(array($k), $path);
        }
    }
    return false;
}

此函数返回数组(1,10)作为OP示例

(将留下另一个答案,以防有人寻找正常的“路径搜索”)


它返回
array(1,10)
,因为父数组的
id
设置为先1后10。我将测试你的功能,谢谢。好的,我现在明白你的意思了,看看我的其他答案。它工作了!我几秒钟前就解决了这个问题,但您的示例使用更少的代码更快地完成了这个任务。谢谢3.
function search_data($needle, $haystack) {
    if (is_array($haystack)) {
        foreach($haystack as $data) {
            if ($data['id'] == $needle) return array();
            if (isset($data['data'])) {
                if (($path = search_data($needle, $data['data'])) !== false) return array_merge(array($data['id']), $path);
            }
        }
    }
    return false;    
}