【问题标题】:PHP - get URL param with or without keyPHP - 获取带或不带密钥的 URL 参数
【发布时间】:2021-12-10 01:02:57
【问题描述】:

我知道如何以笨拙冗长的方式执行此操作,但是是否有一种优雅的方法可以从 URL 中检索单个参数,无论 URL 中是否存在键或索引页面?即永远不会有&secondparam=blah

$_GET["slug"] 仅在 URL 包含 slug=foobar 时有效

例如为这些 URL 中的任何一个返回 foobar

site.com/page/index.php?slug=foobar

site.com/page/index.php?foobar

site.com/page/?slug=foobar

site.com/page/?foobar

【问题讨论】:

  • 您的网址如此多样化,您如何确定永远不会有第二个参数?你应该符合site.com/page/foobar,然后你可以确定控制器是页面,动作是foobar

标签: php url


【解决方案1】:

$_GET 实际上是一个包含所有这些信息的数组。

只需使用 if 语句

if(empty($_GET)) {
    continue
}

【讨论】:

    【解决方案2】:

    这是我的解决方案:

    $slug = $_GET['slug'] ?? reset(array_keys($_GET));
    
    var_dump($slug);
    

    如果没有找到slug,它会返回第一个参数名称。

    请注意,当 URL 参数 'slug' 没有值时,它将是一个空字符串,即:?slugfalse 如果根本找不到参数。

    也许这更一致:

    // edit: added redundant parentheses to make operator precedence more clear
    $slug = ($_GET['slug'] ?? reset(array_keys($_GET))) ?: null;
    
    var_dump($slug);
    

    ...因为对于前面提到的两种极端情况,它将返回 null

    【讨论】:

      【解决方案3】:
      <?php
      
      function reader()
      {
          foreach($_GET as $key => $val)
          {
              if( ! empty($val))
              {
                  return $val;
              }
              return $key;
          }
      }
      
      echo reader();
      ?>
      

      说明: 首先返回 $value。如果不为空,则返回该 $key

      【讨论】:

      • 谢谢你,这完全有效。您是否有实现普通 PHP MVC 的提示/文章链接,我可以在其中将 site.com/venues/?venue=venue-name 替换为 site.com/venues/venue-name 而不必在每个目录中创建带有索引页面的目录?
      猜你喜欢
      • 2012-11-05
      • 2014-08-16
      • 1970-01-01
      • 2023-03-13
      • 2012-07-13
      • 2012-12-17
      • 2013-10-26
      • 1970-01-01
      • 2012-04-10
      相关资源
      最近更新 更多