【问题标题】:How can I check multiple variables and initialize the non-empty one?如何检查多个变量并初始化非空变量?
【发布时间】:2018-05-02 00:28:04
【问题描述】:

我有一个表单,其中一个值的多个输入具有相似的名称。像这样:

isset($_GET['name1'])
isset($_GET['name2'])
isset($_GET['name3'])

总是,要么只有一个是真的,要么一个都不是。这是我的代码:

$name = '';
if( isset($_GET['name1']) ){
    $name = $_GET['name1'];
} else if ( isset($_GET['name2']) ) {
    $name = $_GET['name2'];
} else if ( isset($_GET['name3']) ) {
    $name = $_GET['name3'];
}

echo $name;

我的代码也可以。但我想我可以在没有这些条件的情况下做到这一点。知道如何才能更清楚地编写该逻辑吗?

【问题讨论】:

    标签: php html variables conditional isset


    【解决方案1】:

    你可以使用循环:

    for ($i = 1; $i <= 3; $i++) {
        if (isset($_GET["name$i"])) {
            $name = $_GET["name$i"];
            break;
        }
    }
    

    使用 PHP 7 合并运算符,您可以编写:

    $name = $_GET["name1"] ?? $_GET["name2"] ?? $_GET["name3"] ?? "";
    

    【讨论】:

    • 确实如此。但我正在寻找一种使用 coalesce 函数的方法,这是 PHP 7 中的一个新特性。不确定那到底是什么,但我猜它会检查第一个值是否为 null,如果是,那么它会调查下一个值并等等..
    【解决方案2】:

    循环遍历GET 数组并使用empty 进行测试

    $name=false;
    foreach( $_GET as $field => $value ){
        if( !empty( $value ) ) {
            $name=$value;
            break;
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是一个示例,它不一定将您绑定到名称 name + 1 through 3。优先顺序从左(最好)到右(最不优选),其中优选是指我们选择它们的顺序。

      $names=['name1','name2','name3'];
      
      $name = '';
      foreach ($names as $value) {
        if (isset($_GET[$value])) {
          $name = $_GET[$value];
          break;
        }
      }
      echo $name;
      

      【讨论】:

      • 他只想要第一个非空的名字。
      • @mplungjan 这是一个公平的观点。 命名并不是最好的。
      【解决方案4】:

      可以像下面这样使用三元运算符。

      $name = $_GET['name1'] ?: $_GET['name2'] ?: $_GET['name3'] ?: '';
      

      如果 name1 为空或未设置,则应该跳过 name1 并转到 name2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2016-10-03
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多