2013-07-10 2 views
0

Я работаю над скриптом, который позволяет пользователю загружать удаленный XML-файл и позволяет им выбирать элемент. Затем мне нужно будет получить значение этого элемента на более позднюю дату. XML обновляется регулярно, и я хочу отображать значение обновлений каждый раз.Найти значение в многомерном массиве массивом ключей

До сих пор я преобразовывал XML в многомерный массив, отображал элементы и их значения для пользователя, а когда они выбирают элемент, я сохраняю ключи многомерного массива.

Так, например, если мы имеем следующий массив:

Array 
(
    [responsecode] => 0 
    [message] => 
    [items] => Array 
     (
      [0] => Array 
       (
        [title] => Example1 
        [content] => This is the first message 
        [date] => 00/00/00 
       ) 

      [1] => Array 
       (
        [title] => Example2 
        [content] => This is the second message 
        [date] => 00/00/00 
       ) 
     ) 
) 

Если пользователь выбирает первый элемент заголовка I сохранить путь следующим образом:

$path = "itmes>0>title"; 

Я тогда взрываются строку, чтобы получить отдельные ключи:

$keys = explode(">", $path); 

Array 
    (
     [0] => items 
     [1] => 0 
     [2] => title 
    ) 

Если бы я хотел прочитать значение вручную, я бы использовал:

array['items']['0']['title'] 

Но как бы построить этот запрос, когда у меня есть массив ключей?

ответ

2

Просто написать цикл:

function extract_value(array $array, array $keys) { 
    foreach($keys as $key) { 
     if (!isset($array[$key])) return null; 
     $array = $array[$key]; 
    } 

    return $array; 
} 

Вы бы использовать это как в

$result = extract_value($data, $keys); 

Идея заключается в том, что у вас есть переменная, которая «указывает на» элемент в массиве, и вы обновите его, разветвив каждое значение ключа. Когда ключей больше нет, указатель указывает на ваш результат.

+0

+1 короткий сладкий и красноречивый и правильный. – Orangepill

+0

Отличное спасибо! –

Смежные вопросы