代码之家  ›  专栏  ›  技术社区  ›  stack

如何检查多个变量并初始化非空变量?

  •  0
  • stack  · 技术社区  · 8 年前

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

    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;
    

    我的代码也能正常工作。但我想我可以在没有这些条件的情况下做到这一点。你知道我怎样才能把逻辑写得更清楚吗?

    4 回复  |  直到 8 年前
        1
  •  1
  •   Barmar    8 年前

    您可以使用循环:

    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"] ?? "";
    
        2
  •  1
  •   Professor Abronsius    8 年前

    循环通过 GET 阵列和测试使用 empty

    $name=false;
    foreach( $_GET as $field => $value ){
        if( !empty( $value ) ) {
            $name=$value;
            break;
        }
    }
    
        3
  •  1
  •   Neil    8 年前

    这里有一个例子,如何做到这一点,不一定只绑定到名称 name + 1 through 3 . 偏好顺序从左(最优选)到右(最不优选),其中优选是指我们选择它们的顺序。

    $names=['name1','name2','name3'];
    
    $name = '';
    foreach ($names as $value) {
      if (isset($_GET[$value])) {
        $name = $_GET[$value];
        break;
      }
    }
    echo $name;
    
        4
  •  1
  •   TURTLE    8 年前

    可以使用三元运算符进行如下操作。

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

    如果名称1为空或未设置,则应跳过名称1并转到名称2