ИЗДАНО ИЗ ОРИГИНАЛА, КОТОРЫЙ ПОДРАЗУМЕЛ ТОЛЬКО 1 ДОСТУП
Если у меня есть массив, который содержит х количество массивов, каждый из формы
array('country' => array('city' => array('postcode' => value)))
и другой массив, который может быть
array('country', 'city', 'postcode') or array('country', 'city')
в зависимости от того, что мне нужно получить, как мне использовать второй массив, чтобы определить уровни индекса в первом массиве, а затем получить к нему доступ.
Вложив ссылки с $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']
Циклически перебирайте массив индексов, двигаясь вниз по начальному массиву шаг за шагом, пока не дойдете до конца массива индексов.
$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;
Хорошо, я прошу прощения за то, что изначально не сформулировал мой вопрос более четко, но я заставил его работать, как я надеялся, с переменной переменной, следующим образом:
$keystring = '';
foreach ($keys as $key) {
$keystring .= "['$key']";
}
Затем выполните итерацию основного массива для каждой записи страны в нем и получите доступ к требуемому значению как:
eval('$value = $entry' . "$keystring;");