2013-11-21 3 views
1

У меня есть мульти двумерный массив в PHPВыберите элементы из многомерного массива, используя строку (PHP)

$somearray = array(
    'item1' => array(
     'subitem1' => 'Some value', 
     'subitem2' => 'Some other value', 
     'subitem3' => array(
      'subsubitem' => 'A sub value' 
     ) 
    ), 
    'item2' => 'a different value' 
); 

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

"item1/subitem3/subsubitem" 

Как я могу конвертировать из этой строки карты массива, в:

$wanted_value = $somearray['item1']['subitem3']['subsubitem']; 

, но учитывая, что массив может быть любым количеством уровней в глубину.

+3

'explode' своего пути, затем траверс массива с рекурсивной функцией. – mario

+0

Я не думаю, что это должно быть рекурсивным – tobspr

+1

Просто для удовольствия: 'eval ('$ wanted_value = $ somearray ["'. Str_replace ("/", '"] ["', $ map). '"];'); «Сделано! Но серьезно, используйте метод @ TobSpr. =) – jszobody

ответ

1

Другим способом (должно также проверить, чтобы убедиться, что ключи есть):

$path = explode("/", "item1/subitem3/subsubitem"); 
$result = $somearray; 

foreach($path as $k) { 
    $result = $result[$k]; 
} 
echo $result; 
+0

Я действительно использовал это через @TobSpr, так как мне было проще добавить некоторую базовую проверку здравомыслия с помощью 'if (isset ($ result [$ k]))' в процессе, но оба решения отлично работали. Спасибо вам всем. –

3

Это должно работать:

$parts = explode("/", $map); 

$currentData = $somearray; 
for ($i = 0; $i < count($parts); $i++) { 
    $currentData = $currentData[$parts[$i]]; 
} 

$result = $currentData; 
Смежные вопросы