2011-04-25 142 views
1

我是相當新的PHP和一般編程...我試圖使用foreach循環來設置我創建的頁面上的一些選項。除了最後一節,我試圖動態分配變量,所以我可以在循環之外使用它們。在PHP中的多個變量變量

<?PHP 

$array=array(foo, bar, baz); 

foreach ($array as $option) { 

    // I have if statements to determine what $option_req 
    // and $option_status end up being, they work correctly. 

    $option_req="Hello"; 
    $option_status="World"; 

    $rh='Req_'; 
    $sh='Status_'; 

    $$rh.$$option=$option_req; 
    $$sh.$$option=$option_status; 

    } 

echo "<br>R_Foo: ".$Req_foo; 
echo "<br>S_Foo: ".$Status_foo; 
echo "<br>R_Bar: ".$Req_bar; 
echo "<br>S_Bar: ".$Status_bar; 
echo "<br>R_Baz: ".$Req_baz; 
echo "<br>S_Baz: ".$Status_baz; 

?> 

當循環結束時,現在應該給我六個變量嗎?

$Req_foo 
$Status_foo 

$Req_bar 
$Status_bar 

$Req_baz 
$Status_baz 

我玩過這一點,今天在Google上搜索看起來沒有結果。

+8

對於這一切是神聖的,請不要像這樣做。 – 2011-04-25 19:10:25

+2

也許如果你添加你的整個代碼,它會更有意義......你究竟想要做什麼? – g19fanatic 2011-04-25 19:11:10

回答

1

看起來像PHP不喜歡串聯,當你試圖做一個任務。試着這樣做事先,像這樣:

<?php 

$array = array('foo', 'bar', 'baz'); 

foreach ($array as $option) 
{ 
    $option_req="Hello"; 
    $option_status="World"; 

    $rh = 'Req_'; 
    $sh = 'Status_'; 

    $r_opt = $rh.$option; 
    $s_opt = $sh.$option; 

    $$r_opt = $option_req; 
    $$s_opt = $option_status; 
} 

echo "<br>R_Foo: ".$Req_foo; 
echo "<br>S_Foo: ".$Status_foo; 
echo "<br>R_Bar: ".$Req_bar; 
echo "<br>S_Bar: ".$Status_bar; 
echo "<br>R_Baz: ".$Req_baz; 
echo "<br>S_Baz: ".$Status_baz; 

正如其他評論者認爲,這是不是一個偉大的實踐。嘗試將數據存儲在數組中,而不是僅僅使用變量混淆名稱空間。

+1

感謝您的幫助!這個例子工作...看到這個例子「變量變量」爲我點擊。那麼,上面的一個數組示例給了我一個關於如何做到這一點的更好的想法。 – Colin 2011-04-25 19:25:46

3

要訪問某些數組項,只需訪問某些數組項。
無需循環。

$req = array("foo" => 1, 
      "bar" => 2, 
      "baz" => 3, 
      ); 
echo $req['foo']; 

樸實

+1

謝謝。我總是分配使用默認數字[0],[1]等的數組。給出數組元素名稱使得這更容易引用! – Colin 2011-04-25 19:27:20

0

可變變量不工作的方式。你需要有一個包含字符串的變量。

$opt_r = $rh.$option; 
$$opt_r = $option_req; 

$opt_s = $sh.$option; 
$$opt_s = $option_status; 

此外,請務必註明您的字符串:

$array=array('foo', 'bar', 'baz'); 

我不建議使用可變的變量,但如果你想,這是如何做到這一點。

1

可以(雖然你不應該!)做的事:

${$rh.$option} = ...