我有这样的代码:
session_start();
$user = $_GET['user'];
$mode = $_GET['mode'];
$id1 = $_GET['id1'];
$id2 = $_GET['id2'];
$id3 = $_GET['id3'];
$id4 = $_GET['id4'];
$id5 = $_GET['id5'];
$id6 = $_GET['id6'];
$id7 = $_GET['id7'];
$id8 = $_GET['id8'];
$dep= $mode;
switch ($dep)
{
case "3m":
$dep = "Text 1";
break;
case "all":
$dep = "More text";
break;
default:
$dep = "Text1";
}
还有更多其他案件。我想我很快就会有更多的id和案例。是否有一种更简单的方法可以将URL中的所有id推送到PHP代码中进行评估?
我找到了代码foreach
:
foreach($_GET as $key => $value) {
echo 'key is: <b>' . $key . '</b>, value is: <b>' .$value. '</b><br />';
}
它从URL获取所有变量,但是如何更改代码以便像这样:
$variable = $_GET['variable'];
任何帮助表示赞赏:)
答案 0 :(得分:2)
使用数组,这正是它们的用途。在URL中为参数命名,如:
id[]=1&id[]=2&...
然后$_GET['id']
是一个可以轻松循环的数组。
许多ID 意味着您正在寻找数组的ID ,而不是id1,id2,id3等。数组允许您以与以下相同的方式访问它们$id[1]
,$id[2]
等等,但不需要花费数百个独立变量。
也无需将$_GET
中的每个值分配到自己的变量中,您可以直接从$_GET
使用这些值。通过将它们分配到单个变量中,它们没有变得更好。
答案 1 :(得分:1)
假设我理解正确并且您希望所有GET变量都是您可以使用的实际变量,那么可以使用函数extract。
但是,如文档中所述:
不要对不受信任的数据使用extract(),例如用户输入(即$ _GET, $ _FILES等)。如果您这样做,例如,如果您想运行旧代码 暂时依赖register_globals,请确保使用其中一个 非重写标志值,如EXTR_SKIP,并注意到 你应该以与variables_order中定义的顺序相同的顺序提取 在php.ini中。
所以基本上你不应该这样做,除非你有充分的理由,并且如果不这样做就要小心,不要覆盖任何现有的值。
但是,如果你的选择是这样做:
foreach($_GET as $key => $value) {
$$key=$value;
}
然后提取肯定更好,因为a)您可以将其设置为不覆盖任何现有变量,并且b)您可以拥有前缀,因此可以区分这些导入的变量。像这样:
extract ( $_GET, EXTR_SKIP);
对于$ user,$ mode,$ id不会覆盖任何内容,或
extract ( $_GET, EXTR_PREFIX_ALL, 'user_input' );
for $ user_input_mode,$ user_input_user,$ user_input_id等。
答案 2 :(得分:0)
function getIDs()
{
$ids = array();
if(isset($_GET['id']))
{
foreach($_GET['id'] as $key => $value)
{
$ids[$key] = $value;
}
}
return $ids;
}
如果您可以获取URL以将id
GET参数数组发送到PHP脚本,您只需解析上述函数中的$_GET['id']
数组,假设URI看起来像{{1} }
?id[]=1&id[]=2&id[]=3
答案 3 :(得分:-1)
你可以写
foreach($_GET as $key => $value) {
$$key=$value;
}
这会将每个键名称指定为varibale。