Получить значения массива по ключевому пути PHP

У меня небольшая проблема. Вот мой массив:

$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] . Помогите пожалуйста мне!!!


person nu_pagadi    schedule 23.10.2014    source источник


Ответы (2)


Я бы использовал ссылки вместо рекурсии, но, возможно, кто-то ответит рекурсивной функцией. Если вы знаете ключ 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);
person AbraCadaver    schedule 23.10.2014

Я нашел также это решение:

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