я знаю это
$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