PHP - 如何在循环中创建变量名称?

时间:2013-06-16 16:07:26

标签: php variables

我的目标是创建一个创建变量名称的循环。如:

$variable1
$variable2
$variable3

并在循环内分配值。例如,从1到7的for loop产生变量$variable1, $variable2, $variable3, .etc,每个变量都带有迭代器的值。

6 个答案:

答案 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)

因为变量无法在运行时创建

,所以不可能