从多维数组中获取特定值

6

我有一个非常庞大的多维数组。现在我需要从中找到特定的子数组。
我尝试使用递归函数,但它并没有返回值。
有没有人能提供另一种解决方案呢?
以下是这个数组的预览:

Array
(
    [0] => Array
        (
            [expanded] => 1
            [key] => _1
            [title] => New
        )

    [1] => Array
        (
            [key] => _2
            [title] => Home
        )

    [2] => Array
        (
            [expanded] => 1
            [key] => _3
            [title] => Care
            [children] => Array
                (
                    [0] => Array
                        (
                            [expanded] => 1
                            [key] => _4
                            [title] => face
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [key] => _5
                                            [title] => new
                                        )

                                    [1] => Array
                                        (
                                            [key] => _6
                                            [title] => <strong>face timeline</strong>
                                            [data] => Array
                                                (
                                                    [url] => http://localhost/patient/face-timeline/

                                                    [type] => content
                                                    [cid] => 2291
                                                    [timeline] => 0
                                                )

                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [key] => _2278
                                                            [title] => Post Op Visit
                                                        )

                                                    [1] => Array
                                                        (
                                                            [key] => _2277
                                                            [title] => Surgery
                                                        )

                                                    [2] => Array
                                                        (
                                                            [key] => _2276
                                                            [title] => Pre-Op
                                                        )

                                                    [3] => Array
                                                        (
                                                            [key] => _2275
                                                            [title] => Consultation
                                                        )

                                                    [4] => Array
                                                        (
                                                            [key] => _2274
                                                            [title] => Reseach
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

我想从这个数组提取出下面的数组:

Array
(
    [key] => _6
    [title] => <strong>face timeline</strong>
    [data] => Array
        (
            [url] => http://localhost/patient/face-timeline/
            [type] => content
            [cid] => 2291
            [timeline] => 0
        )

    [children] => Array
        (
            [0] => Array
                (
                    [key] => _2278
                    [title] => Post Op Visit
                )

            [1] => Array
                (
                    [key] => _2277
                    [title] => Surgery
                )

            [2] => Array
                (
                    [key] => _2276
                    [title] => Pre-Op
                )

            [3] => Array
                (
                    [key] => _2275
                    [title] => Consultation
                )

            [4] => Array
                (
                    [key] => _2274
                    [title] => Reseach
                )

        )

)  

以下是我尝试过的:

function recursion($array,$postid) {

    foreach ($array as $key=>$value) {

       if((isset($value['data']['cid'])) && ($value['data']['cid'] == $postid)){

            $tmp = $value;
                return $value;

        }
        if (is_array($value))
        {

            recursion($value,$postid); 
        } 
    }

}  

这个函数没有返回值。
这里的$postid2291。我正在搜索并且可以打印出那个数组,但不能够返回这个值。 这里有一个链接


请在下面附上Array示例的代码,可以直接将代码粘贴在这里或使用fiddle。 - Pragnesh Chauhan
2个回答

1

如果您只想获取特定的值,请使用以下方法:

   function recursive($your_array)
    {
        $newArray = [];

        foreach ($your_array as $key => $val) {
            if (array_keys($your_array) == 'children') {
                foreach($val as $key2 => $val3){
                    $newArray[] = recursive($val3);
                }
            }
        }
        print_r($newArray);
    }

我有更多的时间轴,这个方法对它不起作用。 - user5147795
你能告诉我期望输出的两个索引吗? - aldrin27
在我的问题中,第一个数组的索引2有 face timeline,请检查它的索引。同样,我在索引2处有另一个名为eye timeline的时间轴,与face timeline相同。因为所有在face timeline中的内容也都在eye timeline中。 - user5147795

0
这将给你你的结果:
$searchedData = searchCustomRecursive('2291',$userdb);

function searchCustomRecursive($searchString, $array, $previousArray= Array()){
    if(is_Array($array)){
        $newArray = recursive_array_search($searchString,$array);
        if(is_Array($newArray)){
            searchCustomRecursive($searchString, $newArray,$array);
        }else{ 
            print_r($previousArray); // Check your result here...
            return $previousArray;
      }

    }
}

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $value;
        }
    }
    return false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接