在PHP中动态创建变量

时间:2011-06-01 10:30:20

标签: php variables

我想创建1个变量名,但名称的一部分是存储在$i中的值。 GET结果相同:

$Site.$i = $_GET['site'.$i]; // Should look something like $Site1 = $GET['site1'];

请帮助我了解如何执行此操作。

5 个答案:

答案 0 :(得分:4)

如果您想要一组相关变量,请使用数组:

$site[ $i ] = $_GET['site'.$i];

更好的是,您的GET参数也可以是数组

<强> HTML

<input name="site[foo]" value="bar" />

<强> PHP

$site = $_GET[ "site" ];

print_r( $site );

<强>输出

$site = array(
  "foo" => "bar"
)

如果您希望自动决定数组的索引,则可以执行

<input name="site[]" value="foo" />
<input name="site[]" value="bar" />
<input name="site[]" value="baz" />

并将$_GET[ "site" ]视为

$site = array(
  0 => "foo",
  1 => "bar",
  2 => "baz"
);

答案 1 :(得分:2)

直接回答问题

这就是你如何做到的。然而,不是最好的主意。

$var = "$Site$i";
$$var = $_GET['site'.$i];

这使用了variable variables

备用维护当前URL结构

或许这样的事可能适合你:

$vars = array();
foreach($_GET as $key => $value) {
    if(0 === strpos($key, 'site')) { // Only grab value if the key is prefaced by the string 'site'
        // You must sanitise the value some way here eg:
        // $value = filter_var($value, FILTER_SANITIZE_STRING);
        $vars[] = $value;
    }
}

有关PHP过滤器和清洁/验证的详细信息,请参阅filter_var() man page

修订的网址结构

我认为这可能最好通过在生成URL时使用HTML数组来解决。有关HTML数组的更多信息,请参阅PHP man page

这使您可以访问以下信息:

$site1 = $_GET['site'][0];
$site2 = $_GET['site'][4];

这是处理这种情况最合理的方法。

更新还可以参阅@Mat's answer了解详情。

答案 2 :(得分:1)

出于以下几个原因,这是一个坏主意:

  • 你必须循环遍历$ _GET才能找到所有变量(没有语言构造来模式匹配它们)
  • 动态变量名称令人困惑,可能会打开安全漏洞。

您会发现使用数组将解决第二点,并且使代码处理变得更容易。

第一点可以通过仅使用您知道的变量名来解决。发送一个变量,其中包含有多少“站点”的计数,例如:

site1=example&site2=example2&sitecount=2

这样您就知道只需要阅读site1site2,而不需要检查任何其他GET变量。

答案 3 :(得分:0)

你这样使用$作为$ _GLOBAL。

${'Site' . $i} = $_GET['site' . $i];

或者您可以使用extract

请阅读有关exract的警告。

答案 4 :(得分:0)

您可以使用如下变量变量:

$varname = $Site.$i;
$$varname = $_GET['site'.$i];

不鼓励这样做,因为这是一个巨大的安全风险。您可以编写包含表示$_GET值的字段的类,并在类中验证它们。