Есть ли способ ссылаться на элемент внутри многомерного массива с помощью пути или массива элементов пути? НАПРИМЕР.
$multi = array ( 'array_1' => array ( 'array_2' => array ( 'option_1' => 'value_1', 'option_2' => 'value_2', ) ) ); $path = array('level_1', 'level_2', 'option_1'); $result = $multi[$path];
И имеют $ result = 'value_1'?
Причина в том, что у меня есть рекурсивная функция для поиска через $ multi и нахождения нужного мне ключа и возврата пути $. Я знаю, что могу жестко кодировать путь по своему собственному коду, но я пытаюсь сделать это многоразовым, чтобы я мог редактировать $ multi, и функция все равно будет работать.
В PHP ничего не встроено, но вы можете написать для него функцию, используя движущуюся ссылку:
/** * @param string $path path in the form 'item_1.item_2.[...].item_n' * @param array $array original array */ function &get_from_array($path, &$array) { $current =& $array; foreach(explode('.', $path) as $key) { $current =& $current[$key]; } return $current; }
Пример:
// get element: $result = get_from_array('level_1.level_2.option_1', $multi); echo $result; // --> value_1 $result = 'changed option'; echo $multi['level_1']['level_2']['option_1']; // --> changed_option
Я написал его для преобразования имен из файлов конфигурации в массивы, если вы хотите передать этот путь как массив, как в вашем примере, просто оставьте взорваться.