PHP динамический доступ к ассоциативному массиву

ИЗДАНО ИЗ ОРИГИНАЛА, КОТОРЫЙ ПОДРАЗУМЕЛ ТОЛЬКО 1 ДОСТУП

Если у меня есть массив, который содержит х количество массивов, каждый из формы

array('country' => array('city' => array('postcode' => value)))

и другой массив, который может быть

array('country', 'city', 'postcode') or array('country', 'city')

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

3

Решение

Вложив ссылки с $cur = &$cur[$v]; Вы можете прочитать и изменить исходное значение:
Живой пример на ide1: http://ideone.com/xtmrr8

$array = array('x' => array('y' => array('z' => 20)));
$keys = array('x', 'y', 'z');

// Start nesting new keys
$cur = &$array;
foreach($keys as $v){
$cur = &$cur[$v];
}

echo $cur;  // prints 20
$cur = 30;  // modify $array['x']['y']['z']
0

Другие решения

Циклически перебирайте массив индексов, двигаясь вниз по начальному массиву шаг за шагом, пока не дойдете до конца массива индексов.

$array1 = array('x' => array('y' => array('z' => 20)));
$keys = array('x', 'y', 'z');
$array_data = &$array1;
foreach($keys as $key){
$array_data = &$array_data[$key];
}
echo $array_data;
0

Хорошо, я прошу прощения за то, что изначально не сформулировал мой вопрос более четко, но я заставил его работать, как я надеялся, с переменной переменной, следующим образом:

$keystring = '';
foreach ($keys as $key) {
$keystring .= "['$key']";
}

Затем выполните итерацию основного массива для каждой записи страны в нем и получите доступ к требуемому значению как:

eval('$value = $entry' . "$keystring;");
0
По вопросам рекламы [email protected]