php get array elememnt с помощью $$

я знаю это

$var1 = "10"; $var2 = "var1"; 

то echo $$var2 дает нам 10

я хочу с массивом

У меня есть массив

  $intake_arr = array(5=>10,7=>20,8=>30,9=>40,10=>50,11=>60,12=>70); 

У меня есть некоторая логика, которая выберет один массив из набора массивов, весь массив будет выглядеть как $ consum_arr

если я делаю это $target_arr = "intake_arr";

то может ли $$target_arr[5] дать 10? Я попытался, но я не сделал это значение 10, как я могу достичь этого с помощью массива

Ваше утверждение ( $$target_arr[5] ) неоднозначно. PHP не знает, что вы на самом деле хотите сказать: вы имеете в виду: используйте значение $target_arr[5] и добавьте $ , чтобы использовать это как переменную, или вы хотите использовать значение $target_arr и получить пятый элемент этого массива?
Очевидно, это последнее, но PHP этого не знает . Чтобы устранить ваше заявление, вы должны использовать фигурные скобки:

 ${$target_arr}[5]; 

Это даст 10. См. Руководство по переменным переменным для получения подробной информации.

Заметка:
Как говорят люди в комментариях и удаленных ответах: переменные переменные, такие как тот, который вы используете, представляют собой рискованный бизнес. 9/10 это можно и нужно избегать. Это делает ваш код труднее читать, больше подвержен ошибкам и , в сочетании с этими двумя серьезными недостатками, это убийца: он делает ваш код невероятно сложным для отладки .
Если это всего лишь техническое упражнение, рассмотрите эту заметку как дружеский совет. Если вы получили это от своего рода учебника / блога или другого типа онлайн-ресурса: никогда больше не посещайте этот сайт.
Если вы на самом деле работаете над куском кода, и вы решили решить определенную проблему с помощью переменных vars, то, возможно, разместите свой код в обзоре кода и сообщите мне, я посмотрю и попробую предложите конструктивную критику, которая поможет вам на вашем пути, к лучшему решению.


Поскольку то, что вы на самом деле пытаетесь сделать, это копирование массива в другую переменную, то это довольно просто. PHP предлагает множество способов сделать это:

Копировать по заданию:
PHP копирует массивы при назначении по умолчанию, поэтому это означает, что:

 $someArray = range(1,10);//[1,2,3,4,5,6,7,8,9,10] $foo = $someArray; 

Назначает копию $someArray переменной $foo :

 echo $foo[0], ' === ', $someArray[0];//echoes 1 === 1 $foo[0] += 123; echo $foo[0], ' != ', $someArray[0];//echoes 123 != 1 

Я могу изменить значение одного из элементов массива, не влияя на исходный массив, потому что он был скопирован .
Существует риск для этого, когда вы начинаете работать с закодированными данными JSON, есть вероятность, что вы получите что-то вроде:

 $obj = json_decode($string); echo get_class($obj));//echoes stdClass, you have an object 

По умолчанию объекты передаются и назначаются по ссылке , что означает, что:

 $obj = new stdClass; $obj->some_property = 'foobar'; $foo = $obj; $foo->some_property .= '2'; echo $obj->some_property;//echoes foobar2! 

Измените свойство через $foo , и $obj тоже изменится. Просто потому, что они оба ссылаются на один и тот же объект.

Нарежьте массив:
Более общий способ для разработчиков интерфейсов (в основном, я думаю, вытекающий из JS habbit) – использовать array_slice , который гарантирует возврат копии массива. с добавленным перком, что вы можете указать, сколько элементов вам понадобится в вашей копии:

 $someArray = range(1,100);//"large" array $foo = array_slice($someArray, 0);//copy from index 0 to the end $bar = array_slice($someArray, -10);//copy last 10 elements $chunk = array_slice($someArray, 20, 4);//start at index 20, copy 4 elements 

Если вы не хотите копировать массив, а извлекаете фрагмент из оригинала, вы можете splice массив (как в split + slice):

 $extract = array_splice($someArray, 0, 10); echo count($someArray);//echoes 90 

Это удаляет первые 10 элементов из исходного массива и присваивает их $extract

Проведите некоторое время, просматривая бесчисленные (ну, около сотни) функции массива, предлагаемые PHP.

${$target_arr}[5]

PHP: переменные переменные

Попробуй это:

 $intake_arr = array(5=>10,7=>20,8=>30,9=>40,10=>50,11=>60,12=>70); $target_arr = 'intake_arr'; print ${$target_arr}[5]; //it gives 10 

Для простой переменной фигурные скобки необязательны. Но когда вы будете использовать элемент массива, вы должны использовать фигурные скобки; eg: ${$target_arr}[5]; . В качестве стандарта используются фигурные скобки, если используется переменная интерполяция, а не конкатенация. Обычно переменная интерполяция медленная, но конкатенация также может быть медленнее, если у вас слишком много переменных для конкатенации. Посмотрите здесь на переменные переменных php http: / /php.net/manual/en/language.variables.variable.php