PHP函数返回数组索引路径

时间:2011-07-16 12:59:20

标签: php arrays search path indexing

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

采取以下数组:

    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,则会返回array(1,10)。然而,在许多尝试中我失败了。设置路径应设置为索引id。但是,我无法弄明白。任何指导的话都非常感谢。

2 个答案:

答案 0 :(得分:2)

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

(将留下其他答案以防万一有人会寻找正常的“路径搜索”)

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

答案 1 :(得分:1)

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

在数组中搜索$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;
}