Ответ 1
Используйте синтаксис ${'varname}}:
for($i=1; $i <= 5; $i++) {
${'file' . $i} = $i;
}
Однако вместо этого часто лучше использовать массивы.
Предположим, что у меня есть переменная с именем $file и цикл 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);
?>