как изменить имя переменной php в цикле?

Допустим, у меня есть переменная с именем $ 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); ?>