2011-06-04 41 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); 
?>