【问题标题】:Dynamic $_GET[$value] - any ideas?动态 $_GET[$value] - 有什么想法吗?
【发布时间】:2015-04-28 09:54:45
【问题描述】:

有人可以解决这个问题吗?

我有一个针对 L0、L1、L2 等的 htaccess 规则...作为页面 id (index.php?L0=example&L1=page1 并重命名为 example/page1.html) 我想添加额外的 get vars example/page1.html?filter=event

我以为我能做到这一点

$i=0;
foreach ($_GET['L'.$i] as $key => $value) {
$pages[] = $value;  
$i++;  
}
$page_id = end($pages);

这不起作用。

这会将页面放入自己的数组中,然后我可以单独定位其他变量。

目前我使用 'end($_GET)' 获得我想要的页面,但如果我添加额外的 get vars,它会发生冲突。

【问题讨论】:

    标签: php


    【解决方案1】:

    您需要将整个 GET 数据放入一个数组中,然后才能轻松处理它。这将使您更好地理解该问题,并且您可能必须更改获取 L0、L1 的策略,因为它们不是 GET 数据。

    【讨论】:

    • 抱歉,我不确定您的意思。我可以将所有 GET 加载到一个数组中,但我不确定如何定位最后一个 L 值
    【解决方案2】:

    第 1 部分 -- 开头的格式不正确。

    如果你想使用foreach结构,你需要确保传递给它的值是一个数组。当前,您正在将非数组值传递给 foreach,因此它永远不会触发。

    您应该重新构造您的 $_GET 值,以便使用数组指示符而不是使用(手动)数字指示符 --

    $_GET['L0'], 
    $_GET['L1'] 
    

    变成

    $_GET['L'][...]
    

    所以你的 URL 将是 file.php?L[]=value1&L[]=value2 等。然后 PHP 可以非常整齐地处理这些作为 foreach 循环。

    How to get PHP $_GET array?

    第 2 部分 - 获得您想要的价值

    上面的值将/可以被处理为:

    foreach ($_GET['L'] as $value) {
    $pages[] = $value;  
    }
    $page_id = end($pages);
    

    这意味着无需担心“计数”,因为它是自动的且自包含的。它还将(可能)使 .htaccess 值的分配更容易一些,因为 $_GET 数组名称将始终相同(在本例中为L[]=)。

    但为了获得正确的值,您需要为其分配一个标识符 - 或 Key,假设您正在寻找一个 filter 值 - 什么您所做的是手动检查“键”是您要查找的那个,因此您不要使用所有相同的L<number> 定义 GET 数组,而是例如再次使用您的 foreach 循环,这次定义键是什么:

    所以给定 URL 查询:

    page.php?L[]=var1&L[filter]=var2&L[]=var3 
    

    foreach 将被重写为:

    foreach ($_GET['L'] as $key => $value) {
         if ($key == "filter"){
                $pages[$key] = $value; 
                 }
           else {
             $pages[] = $value;
                  }   
            }
       $page_id = $pages['filter'];
    

    因此,如果存在 filter 值,则定义它。这意味着在此过程之后,PHP 中过滤器的值是$pages['filter'] - 如果存在则明确定义。

    【讨论】:

      【解决方案3】:

      这个怎么样?

      $i = 0;
      while (isset($_GET['L' . $i])) {
          $key = 'L' . $i;
          $value = $_GET[$key];
          $pages[] = $value;
          $i++;
      }
      

      您的代码仅遍历$_GET['L0'],如果不是数组,则会失败。因此,您可以遍历 $_GET 并仅使用那些以 L 开头的键,或者按照我的建议获取这些值。

      【讨论】:

      • 您能否为 OP 的动态添加一些解释,说明为什么这比他的原版效果更好?
      • 他的原始方法不正确,如果$_GET['L0'] 不是数组(因为他试图迭代$_GET['L0'],它是一个字符串),它会引发一些警告。如果他使用foreach,他必须遍历$_GET 上的所有项目,但如果他只想迭代一些键,我认为我的方法更好。
      【解决方案4】:

      谢谢大家,我实际上是在等待回复的时候弄清楚它是否正确。但它有效。

      $i=0;
      foreach ($_GET as $key => $value) {
         if($key=='L'.$i){
           $pages[] = $value;
         }  
      $i++;  
      }
      $page_id = end($pages);
      

      【讨论】:

      • 只有当$_GET 的第一个键是L0 时才有效。如果在此之前有任何密钥,它将不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2016-08-05
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多