如何在循环中更改PHP变量名?

30
假设我有一个名为 $file 的变量和一个 for 循环: for($i=1; $i <= 5; $i++) {} 对于循环的每一次迭代,$i 的值将附加到 $file 变量名称上,因此在循环结束后,我应该有五个变量:$file1$file2$file3$file4$file5

4
为什么你想要这样做?使用(关联)数组作为可移植的命名空间几乎总是更好的解决方案。 - mu is too short
5个回答

74

使用${'varname'}语法

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

然而,使用数组通常比这种方法更好。


3
谢谢你!即使在2014年,你的回答仍在帮助人们! - sweaty
1
我所做的工作不适合使用数组,因为我是逐行制作文件,所以我有$line01="foo"....$line55="bar"这样的代码,因此使用变量变量方法似乎对我来说是最合理的,除非在逐行创建时有更好的方法?那么,如何在01-09上添加0填充呢?我想在for循环中使用if语句,但是否有更好的方法? - Jon Weinraub

15

有一种方法可以实现这个:

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

但这是一个不好的想法。为什么是个不好的想法?因为这正是数组的用途。应该这样做:

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

(注意:通常习惯于从0开始而不是1开始对数组键进行编号,但您不必这样做。)


4

你想做的事情是可行的,但是动态创建变量似乎不是解决这个问题的常规方法(我可能错了)

我建议将文件名存储在一个数组中,这样以后你就可以轻松地遍历文件,或者添加一个额外的文件而不必更改任何硬编码的变量名。

    $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";
    }

3
您也可以使用数组。虽然它没有完全相同的效果,但通常在这些情况下我看到人们使用它。
for($i=1; $i <= 5; $i++) {
    $file[$i] = $i;
}

1
请参考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);

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接