2011-04-25 143 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} = ...