我的目标是创建一个创建变量名称的循环。如:
$variable1
$variable2
$variable3
并在循环内分配值。例如,从1到7的for loop
产生变量$variable1, $variable2, $variable3,
.etc,每个变量都带有迭代器的值。
答案 0 :(得分:36)
有几种方法。一个是通过字符串和双$
,但我不喜欢这种方法。程序员可以轻松删除double $
(将其视为typeo)。
for($i = 0; $i <= 7; $i++) {
$name = "variable{$i}";
$$name = "foo";
}
最好的方法是明确的陈述。
for($i = 0; $i <= 7; $i++) {
${"variable$i"} = "foo";
}
使用明确的内联字符串,毫无疑问您正在做的事情的意图。另一个PHP程序员不会错误地改变代码。
答案 1 :(得分:14)
你应该使用一个数组:
for($i = 1; $i <= 7; $i++) {
$variable[$i] = $i;
}
编辑:澄清一下,你应该使用一个数组,因为没有代码(据我所知)接受$ variable1而不是$ variable [1]。动态生成变量名称是各种错误。
答案 2 :(得分:4)
只是为了扩展其他人所说的为什么这是一种最好避免的技术:变量名仅供程序员使用;根据语言的运行时间,它们没有关系或属性。因此,应该将相关变量的集合放入表示某个适当容器的变量中 - 在PHP的情况下,它是非常灵活的“数组”类型。
每当提出动态命名变量的问题时,通常是因为有人认为它是特定问题的解决方案,但它通常会导致比解决更多的问题 - 例如,一旦程序的一部分开始动态命名变量,在任何想要使用这些变量的地方也必须动态命名它们;找出实际设置的项目变得不必要地复杂,等等。
对于某些类型的调试和元编程,变量变量很有用的上下文很少,但是像goto
一样,它们在语言中的存在不应该意味着你不要尝试所有其他可能的解决方案首先。
答案 3 :(得分:1)
如果你有一个关联数组,我更喜欢使用extract()
方法。查看here
例如
<?php
/* Suppose that $var_array is an array*/
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape";
?>
上面的代码会输出,
blue, large, sphere, medium
答案 4 :(得分:0)
如果有人想通过一个对象来做到这一点:
<?php
$x = 1;
while($x <= 4){
echo $q->{"a$x"};
$x++;
?>
答案 5 :(得分:-12)
因为变量无法在运行时创建
,所以不可能