0

我有这样的代码:

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";
}

还有更多其他情况。我想我很快就会有更多的身份证和案例。有没有一种更简单的方法可以从 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

4 回答 4

2

使用数组,这正是它们的用途。将 URL 中的参数命名为:

id[]=1&id[]=2&...

然后$_GET['id']是一个可以轻松循环的数组。

许多 ids意味着您正在寻找一个ids 数组$id[1],而不是 id1、id2、id3 等。数组允许您以与,等几乎相同的方式访问它们$id[2],但无需担心需要收集数百个自变量。

也不需要将每个值从分配$_GET到自己的变量中,您可以直接使用这些值 from $_GET。通过将它们分配给单个变量,它们并没有变得更好。

于 2013-10-23T07:42:05.650 回答
1

假设我理解正确并且您希望所有 GET 变量都是您可以使用的实际变量,那么有一个函数提取可以做到这一点。

但是,如文档中所述:

不要对不受信任的数据使用 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' );

对于 $user_input_mode、$user_input_user、$user_input_id 等。

于 2013-10-23T07:42:21.053 回答
0
function getIDs()
{ 
    $ids = array();

    if(isset($_GET['id']))
    {
       foreach($_GET['id'] as $key => $value)
       {
          $ids[$key] = $value;
       }
    }
   return $ids;
}

如果你可以让你的 URL 将一个 GET 参数数组发送id到 PHP 脚本,你可以$_GET['id']在上面的函数中解析数组,假设 URI 看起来像?id[]=1&id[]=2&id[]=3

$ids = getIDs();
于 2013-10-23T07:45:36.403 回答
-1

你可以写

foreach($_GET as $key => $value) {
        $$key=$value;
    }

这会将每个键名分配为变量。

于 2013-10-23T07:48:19.610 回答