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

#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);
  

ДЕМОНСТРАЦИЯ