通过关键路径PHP获取数组值

时间:2014-10-23 17:01:59

标签: php arrays recursion path key

我有点问题。这是我的阵列:

$data = array(
    'properties'=>array{
         [0]=>
             array {
                 ["name"]=>"prop1",
                 ["properties"]=>
                 array {
                     [0]=>
                         array(5) {
                             ["name"]=>"sub_prop1"
                         }
                     [1]=>
                         array(6) {
                             ["name"]=>"sub_prop2",
                             ["properties"]=>
                             array(2) {
                                  [0]=>
                                     array(6) {
                                          ["name"]=>"MARK"
                                     }
                             }
                       }
                }
        },
        [1]=>
            array {
                ["name"]=>"prop2"
           }
    }   
);

阵列路径为:0/1/0。 我知道所有的键直到名为“Mark”的数组,我需要一个递归函数来得到这个数组等价于:$ data ['properties'] [0] ['properties] [1] [properties] [0] 。请帮帮我!!!

2 个答案:

答案 0 :(得分:1)

我会使用引用而不是递归,但也许有人会用递归函数来回答。如果您知道name密钥,则将其放入路径中。如果没有,则reset将获得第一项:

$path = array('properties', 0, 'properties', 1, 'properties', 0);

$result =& $data;

foreach($path as $key) {
    $result =& $result[$key];
}
echo reset($result);

// or if you want array('name' => 'MARK')
print_r($result);

答案 1 :(得分:1)

我也找到了这个解决方案:

function get_array_by_key_path($data, $key_path){
    if(count($key_path) == 0){
        return $data;        
    } 
    $key = array_shift($path_keys);
    // and recursion now
    return get_array_by_key_path($data['properties'][$key], $keys);
}