#php #variables #loops #for-loop
#php #переменные #циклы #for-loop
Вопрос:
Допустим, у меня есть переменная с именем $file и цикл for: for($i=1; $i <= 5; $i ) {}
Для каждой итерации цикла for к $i
имени переменной будет добавляться $file
значение, поэтому после завершения цикла for у меня должно быть пять переменных: $file1
, $file2
, $file3
, $file4
и $file5
.
Комментарии:
1. Почему вы хотите это сделать? Использование (ассоциативного) массива в качестве переносимого пространства имен почти всегда является лучшим решением.
Ответ №1:
Используйте синтаксис ${‘varname’}:
for($i=1; $i <= 5; $i ) {
${'file' . $i} = $i;
}
Однако часто вместо этого лучше использовать массивы.
Комментарии:
1. @Yuri Большое вам спасибо! Даже в 2014 году ваш ответ помогает людям!
2. Массивы для того, что я делаю, не помогут, я создаю файл построчно, поэтому у меня есть
$line01="foo"
….$line55="bar"
поэтому выполнение этого метода переменной переменной, кажется, имеет наибольший смысл для меня, если только нет лучшего способа создания построчно? Итак. как у меня также было заполнение 0 на 01-09? Я полагаю, что это оператор if в цикле for, но есть ли способ получше?
Ответ №2:
Есть способ сделать это:
for($i = 1; $i <= 5; $i ) {
${'file'.$i} = ...;
}
Но это плохая идея делать это. Почему это плохая идея? Потому что для этого предназначены массивы. Сделайте это вместо:
for($i = 1; $i <= 5; $i ) {
$file[$i] = ...;
}
(ПРИМЕЧАНИЕ. Обычно ключи массива начинаются с 0, а не с 1, но вам не обязательно это делать.)
Ответ №3:
можно делать то, что вы хотите, но создание переменных «на лету» кажется необычным способом решения подобной проблемы (я могу ошибаться)
Я бы предложил сохранить имена файлов в массиве, таким образом, вы сможете легко перебирать файлы позже или добавить дополнительный файл и не менять никаких жестко закодированных имен переменных
$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 -> $valn";
}
Ответ №4:
Вы также можете использовать массив. Это не оказывает такого же точного воздействия, но, как правило, я вижу, что это используется в таких ситуациях.
for($i=1; $i <= 5; $i ) {
$file[$i] = $i;
}
Ответ №5:
Смотрите руководство 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);