Допустим, у меня есть переменная с именем $ file и for for: for($i=1; $i <= 5; $i++) {}
Для каждой итерации цикла for значение $i
будет добавлено к имени переменной $file
поэтому после завершения цикла for у меня должно быть пять переменных: $file1
, $file2
, $file3
, $file4
и $file5
.
Используйте синтаксис $ {'varname'} :
for($i=1; $i <= 5; $i++) { ${'file' . $i} = $i; }
Однако вместо этого часто лучше использовать массивы.
Есть способ сделать это:
for($i = 1; $i <= 5; $i++) { ${'file'.$i} = ...; }
Но это плохая идея . Почему это плохая идея? Потому что это то, для чего предназначены массивы . Сделайте это вместо этого:
for($i = 1; $i <= 5; $i++) { $file[$i] = ...; }
(NB. Это обычное соглашение для запуска ключей массива в 0, а не 1, но вам этого не нужно).
вы можете делать то, что хотите, но создавать переменные «на лету» кажется необычным способом решения такой проблемы (я мог ошибаться)
Я бы предложил хранить имена файлов в массиве, таким образом, вы можете легко перебирать файлы позже или добавить дополнительный файл и не изменять какие-либо жестко заданные имена переменных
$myfiles = array(); for ($i=1; $i<=5; $i++) { $myfiles["file$i"] = "value set in loop"; } //if you want to use the values later $file5_value = $myfiles["file5"]; //if you want to loop through them all foreach ($myfiles as $key => $val) { echo "$key -> $val\n"; }
См. Руководство PHP по переменным переменным .
$var_name = ''; for ($i = 0; $i < 5; $i++) { $var_name = 'file' . $i; // reference $$var_name now. $$var_name = 'foo'; } var_dump($file1); var_dump($file2); var_dump($file3); var_dump($file4); var_dump($file5);
демонстрация
Вы также можете использовать массив. Он не имеет точного аффекта, но обычно это то, что я вижу в этих ситуациях.
for($i=1; $i <= 5; $i++) { $file[$i] = $i; }
См. Раздел « Переменные переменные » в руководстве по PHP. Вы можете использовать $$
для своих нужд следующим образом:
<?php $var_prefix = 'file'; for($i=1; $i <= 5; $i++) { $var_name = $var_prefix . $i; $$var_name = 'Foo Bar Blah Baz ' . $i; } var_dump($file1, $file2, $file3, $file4, $file5); ?>