我想创建1个变量名,但名称的一部分是存储在$i
中的值。 GET结果相同:
$Site.$i = $_GET['site'.$i]; // Should look something like $Site1 = $GET['site1'];
请帮助我了解如何执行此操作。
答案 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。
或许这样的事可能适合你:
$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)
出于以下几个原因,这是一个坏主意:
您会发现使用数组将解决第二点,并且使代码处理变得更容易。
第一点可以通过仅使用您知道的变量名来解决。发送一个变量,其中包含有多少“站点”的计数,例如:
site1=example&site2=example2&sitecount=2
这样您就知道只需要阅读site1
和site2
,而不需要检查任何其他GET变量。
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以使用如下变量变量:
$varname = $Site.$i;
$$varname = $_GET['site'.$i];
不鼓励这样做,因为这是一个巨大的安全风险。您可以编写包含表示$_GET
值的字段的类,并在类中验证它们。