【问题标题】:PHP GET Question: How do I set a variable value only if it's not in the query string?PHP GET 问题:如果变量值不在查询字符串中,如何设置它?
【发布时间】:2011-04-01 19:41:23
【问题描述】:

如果参数存在,我知道如何从查询字符串中获取值:

$hop = $_GET['hop'];

但如果它不在查询字符串中,我还需要设置一个默认值。我试过了,它没有用:

$hop = $_GET['hop'];

if ($hop = " ") {
  $hop = 'hardvalue';
};

请帮我处理查询字符串有和没有“hop”参数的情况,如果它存在但未定义:

example.com/?hop=xyz

&

example.com/

&

example.com/?hop=

PS 我不知道我在做什么,所以如果你向我解释,请同时包含我添加到我的 PHP 页面的确切代码。

【问题讨论】:

    标签: php get query-string setvalue


    【解决方案1】:

    使用array_key_exists

    if (array_key_exists('hop', $_GET))
    {
     // the key hop was passed on the query string.
     // NOTE it still can be empty if it was passed as ?hop=&nextParam=1
    
    } 
    else
    {
     //the key hop was not passed on the query string.
    }
    

    【讨论】:

      【解决方案2】:

      想了想,决定它应该更健壮一点:

      $hop = 'hardvalue';
      if (array_key_exists('hop', $_GET)) {
          if (!empty($_GET['hop'])) { $hop = $_GET['hop']; }
      }
      

      【讨论】:

        【解决方案3】:

        您已经得到了繁琐的解决方案。使用 URL 或表单参数时,您通常也希望将空字符串或零视为缺失值。然后你可以使用这个替代语法:

        $hop = $_GET["hop"]   or   $hop = "hardvalue";
        

        因为=or 具有更高的优先级,所以它可以工作,并且使用额外的空格更易于阅读。

        从 PHP 5.3 开始也可以使用:

        $hop = $_GET["hop"]  ?:  "hardvalue";
        

        这里的优点是这种语法不会引起 php 的注意,这对于调试很有用。

        【讨论】:

        • Sweet,我最喜欢这个,因为它简单又优雅。
        【解决方案4】:

        其实我会用

        $hop = !empty($_GET['hop']) ? $_GET['hop'] : 'default';
        

        使用empty() 而不是isset() 可以处理您的第三种情况,其中参数存在但未定义。

        另外,在if ($hop = " ") 中,= 需要更改为=== 分配,== 测试相等性。按照您的方式,if 语句将始终运行,无论 $hop 等于什么。

        【讨论】:

        • 感谢您澄清 = 与 ==。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2016-03-06
        • 2011-10-18
        相关资源
        最近更新 更多