来自url的所有变量

时间:2013-10-23 07:38:54

标签: php get

我有这样的代码:

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'];

任何帮助表示赞赏:)

4 个答案:

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