2017-11-18 184 views
0

我有一个具有多个输入的表单,其中一个值具有相似的名称。这样的事情:如何检查多个变量并初始化非空变量?

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; 

我的代码也适用。但我想我可以在没有这些条件的情况下这样做。任何想法我怎么能写出更清洁的逻辑?

回答

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"] ?? ""; 
+0

的确如此。但我正在寻找一种使用'coalesce'函数的方法,这是PHP 7中的一项新功能。不确定那是什么,但我想它会检查null的第一个值,如果是,则调查下一个值,然后调查下一个值等等。 – stack

1

下面是一个示例,说明如何做到这一点,并不一定仅限于名称name + 1 through 3。优先顺序从左(最优先)去右(最优先),其中最好是指我们接他们的顺序

$names=['name1','name2','name3']; 

$name = ''; 
foreach ($names as $value) { 
    if (isset($_GET[$value])) { 
    $name = $_GET[$value]; 
    break; 
    } 
} 
echo $name; 
+0

他只想第一个非空的名字。 – Barmar

+0

@Barmar好的。我会很快更新我的。 – Neil

+0

@mplungjan这是一个公平点。 *命名*并不是最好的。 – Neil

1

循环遍历GET阵列和测试使用empty

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

谢谢。给予好评 – stack

1

对于下面的这种情况,可能会使用三元运算符。

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

应该跳过名1,去NAME2如果名1是空的,或者没有设置