как изменить имя переменной php в цикле? - PullRequest
23 голосов
/ 04 июня 2011

Допустим, у меня есть переменная с именем $ file и цикл for: for($i=1; $i <= 5; $i++) {}

Для каждой итерации цикла for значение $i будет добавляться к имени переменной $file, поэтому после окончания цикла for у меня должно быть пять переменных: $file1, $file2, $file3 , $file4 и $file5.

Ответы [ 5 ]

63 голосов
/ 04 июня 2011

Использовать $ {'varname'} синтаксис :

for($i=1; $i <= 5; $i++) {
    ${'file' . $i} = $i;
}

Однако вместо этого часто лучше использовать массивы.

11 голосов
/ 04 июня 2011

Там есть способ сделать это:

for($i = 1; $i <= 5; $i++) {
    ${'file'.$i} = ...;
}

Но это плохая идея сделать это. Почему это плохая идея? Потому что это то, для чего предназначены массивы . Сделайте это вместо:

for($i = 1; $i <= 5; $i++) {
    $file[$i] = ...;
}

(NB. Обычно принято начинать ключи массива с 0, а не с 1, но это не обязательно.)

4 голосов
/ 04 июня 2011

можно делать то, что вы хотите, но создание переменных на лету кажется необычным способом решения такой проблемы (я могу ошибаться)

Я бы предложил хранить имена файлов в массиве, чтобы впоследствии вы могли легко перебирать файлы или добавлять дополнительный файл, не меняя жестко закодированных имен переменных

    $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";
    }
2 голосов
/ 04 июня 2011

Вы также можете использовать массив. Это не имеет такого же точного эффекта, но в целом это то, что я вижу, используется в этих ситуациях.

for($i=1; $i <= 5; $i++) {
    $file[$i] = $i;
}
1 голос
/ 04 июня 2011

См. Руководство 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);

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...