2017-11-18 152 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是空的,或者沒有設置