Я пытаюсь использовать динамические имена переменных (я не уверен, что они на самом деле называются) Но в значительной степени это выглядит так:
for($i=0; $i<=2; $i++) { $("file" . $i) = file($filelist[$i]); } var_dump($file0);
Возврат null
который говорит мне, что он не работает. Я понятия не имею, какой синтаксис или техника, которую я ищу, здесь, что затрудняет исследование. $filelist
определяется ранее.
Оберните их в {}
:
${"file" . $i} = file($filelist[$i]);
Использование ${}
– это способ создания динамических переменных, простой пример:
${'a' . 'b'} = 'hello there'; echo $ab; // hello there
В PHP вы можете просто добавить дополнительную переменную $
перед переменной, чтобы сделать ее динамической переменной:
$$variableName = $value;
Хотя я бы не рекомендовал его, вы могли бы даже связать это поведение:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Вы можете, но не вынуждены ставить $variableName
между {}
:
${$variableName} = $value;
Использование {}
является обязательным только в том случае, если имя вашей переменной представляет собой состав нескольких значений, например:
${$variableNamePart1 . $variableNamePart2} = $value;
Тем не менее рекомендуется всегда использовать {}
, потому что это более читаемо.
Другая причина всегда использовать {}
, заключается в том, что PHP5 и PHP7 имеют несколько иной способ работы с динамическими переменными, что в некоторых случаях приводит к другому результату.
В PHP7 динамические переменные, свойства и методы теперь будут оцениваться строго в порядке слева направо, в отличие от сочетания особых случаев в PHP5. Приведенные ниже примеры показывают, как изменился порядок оценки.
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
Попробуйте использовать {}
вместо ()
:
${"file".$i} = file($filelist[$i]);
Tom, если у вас есть существующий массив, вы можете преобразовать этот массив в объект и использовать его следующим образом:
$r = (object) $MyQueryResult; echo $r->key;
Я делаю это довольно часто по результатам, возвращаемым из запроса.
например
// $MyQueryResult is an array of results from a query foreach ($MyQueryResult as $key=>$value) { ${$key}=$value; }
Теперь я могу просто использовать $ MyFieldname (что проще в выражениях эха и т. Д.), А не $ MyQueryResult ['MyFieldname']
Да, это, наверное, лениво, но у меня никогда не было никаких проблем.
У меня есть решение для динамически созданного значения переменной и объединено все значение в переменной.
if($_SERVER['REQUEST_METHOD']=='POST'){ $r=0; for($i=1; $i<=4; $i++){ $a = $_POST['a'.$i]; $r .= $a; } echo $r; }
Я был в положении, когда у меня было 6 одинаковых массивов, и мне нужно было выбрать правильный вариант в зависимости от другой переменной, а затем присвоить ей значения. В случае, показанном здесь, $ comp_cat был «a», поэтому мне нужно было выбрать мой массив «a» (у меня также были массивы «b» до «f»)
Обратите внимание, что значения для позиции переменной в массиве идут после закрывающей скобки.
$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [0] = "FRED BLOGGS";
$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [1] = $ file_tidy;
echo 'Первое значение массива – $. $ comp_cat_a_arr [1] [0].' а второе значение – $ comp_cat_a_arr [1] [1];