Массив PHP как имя переменной

Как отправить имя индекса для phpмассива vairable.

массив

$array = array('Somthing'=>array('More'=>array('id'=> 34))); 

и теперь я хочу показать эту вещь, но с именем переменной я не знаю, как объяснить, поэтому я пишу то, что хочу.

 $index_name = '[Something][More][id]'; $array{$index_name}; 

Возможно ли это каким-либо образом?

Related of "Массив PHP как имя переменной"

Не в одном так. Вот как вы это сделаете:

 $array['Something']['More']['id'] 

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

 function array_multi(Array $arr, $path) { $parts = explode(".", $path); $curr =& $arr; for ($i = 0, $l = count($parts); $i < $l; ++$i) { if (!isset($curr[$parts[$i]])) { // path doesn't exist return null; } else if (($i < $l - 1) && !is_array($curr[$parts[$i]]) { // path doesn't exist return null; } $curr =& $curr[$parts[$i]]; } return $curr; } // usage: echo array_multi($array, "Something.More.id"); // 34 echo array_multi($array, "Something.More"); // array("id" => 34) 

Рекурсивная версия, поддерживающая ваш синтаксис с квадратными скобками:

 $array = array('Something'=>array('More'=>array('id'=> 34))); $string = '[Something][More][id]'; echo scan_array($string, $array); function scan_array($string, $array) { list($key, $rest) = preg_split('/[[\]]/', $string, 2, PREG_SPLIT_NO_EMPTY); if ( $key && $rest ) { return scan_array($rest, $array[$key]); } elseif ( $key ) { return $array[$key]; } else { return FALSE; } } 

Хорошо, я знаю, что это то, как люди стреляют. Но c'mon, eval() не всегда является неправильным ответом.

 $array = array('Something'=>array('More'=>array('id'=> 34))); $index_name = '[Something][More][id]'; eval('$val = $array'.$index_name.';'); // Wrap in a function or something 

Вы можете сделать это с помощью eval () :

 <?php $array = array('Somthing'=>array('More'=>array('id'=> 34))); $index_name = "['Somthing']['More']['id']"; $stmt='echo $array'.$index_name.';'; eval($stmt); ?> 

ОБНОВИТЬ:

Кажется, некоторым пользователям SO неудобно идея использования eval (). Я думаю, что имеет смысл прочитать эту тему, в которой обсуждаются плюсы и минусы, прежде чем решать, использовать ли это в своем собственном коде.

Если вы загнали себя в угол, чтобы сделать что-то подобное, есть неплохие шансы, что вы сделали что-то еще плохо. Для этого есть веские причины, но не очень часто.

 function key_path($arr, $keys) { return $keys ? key_path($arr[array_shift($keys)], $keys) : $arr; } $arr['Something']['More']['id'] = 34; $keys = array('Something', 'More', 'id'); var_dump( key_path($arr, $keys));