2011-06-04 75 views
17

可以说我有一个变量名为$文件和for循环:for($i=1; $i <= 5; $i++) {}如何在循环中更改php变量名?

有关的for循环中,$i值将被追加到$file变量名每次迭代打完了循环结束,我应该有五个变量:$file1,$file2,$file3,$file4$file5

+4

您为什么要这么做?使用(关联)数组作为可移植的名称空间几乎总是一个更好的解决方案。 – 2011-06-04 05:16:40

回答

55

使用${'varname'} syntax

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

然而,它往往是更好地使用数组,而不是这个。

+0

+1,忘记了你可以使用大括号引用。 – 2011-06-04 05:18:00

+3

@Yuri非常感谢你!即使在2014年,你的答案正在帮助人们! – sweaty 2014-03-19 12:35:31

+1

对于我所做的事情的阵列将无济于事,我正逐行创建一个文件,所以我有'$ line01 =“foo”'....'$ line55 =“bar”'这样做这个变量变量方法为了让我觉得最合理,除非有更好的方法来创建每行代码?所以。我如何在01-09上填充0填充?我想在for循环中有一个if语句,但是有更好的方法吗? – 2015-02-09 15:22:39

1

请参阅PHP的手册Variable Variables

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

demo

9

一个办法做到这一点:

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

但它是一个坏主意做到这一点。为什么这是一个坏主意?因为这是阵列的意思。做到这一点,而不是:

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

(NB正是在0而不是1开始数组键通常的惯例,但你不必这么做。)

+0

+1正是我要说的。 – 2011-06-04 05:19:54

1

您可以使用数组以及。它没有相同的确切影响,但它通常是我在这些情况下看到的。

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

就可以做你想做的,而是动态创建变量似乎解决这样的问题,一个不寻常的方式(我可能是错的)

我建议储存在一个文件名阵列,这样你可以很容易地在文件迭代以后,或增加一个额外的文件,并没有改变任何硬编码的变量名

0

参考PHP手册中的Variable variables部分。您可以使用$$来满足您的需求:

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