2016-04-27 63 views
3

我儘量縮短我的代碼,所以我一起去縮短以下類型的if語句:檢測其條件是在多個虛假if語句

// a,b,c,d needed to run 
if (empty(a)) { 
    echo 'a is empty'; 
} elseif (empty(b)) { 
    echo 'b is empty'; 
} elseif (empty(c)) { 
    echo 'c is empty'; 
} elseif (empty(d)) { 
    echo 'd is empty'; 
} else { 
    // run code with a,b,c,d 
} 

有沒有一種方法來檢測的哪一個條件是錯誤的(是emtpy)?

if (empty(a) || empty(b) || empty (c) || empty(d)) { 
    echo *statement n*.' is empty'; 
} else { 
    // run code with a,b,c,d 
} 

我曾想過一個for循環,但這需要大規模的代碼更改。 也許有人可以指點我正確的方向。

感謝提前:)

+0

我不知道。 也許for循環不是一個壞主意 用變量聲明一個數組,並在for內部做id,並打破。 或者如果你想要的話你可以顯示'a','c'是空的...... – cmnardi

+1

你實際上是指,哪個語句是'true'。 – DevDonkey

回答

1

使用compactarray_filterarray_diff

$arr = compact('a', 'b', 'c', 'd'); 
if(count($empty = array_diff($arr, array_filter($arr)))) 
{ 
    echo key($empty) . ' is empty'; 
} 
else 
{ 
    echo 'OK'; 
} 

通過這種方式,在$empty你把所有的空值。所以你可以回顯所有鍵的警告:

echo 'Empty: ' . implode(', ', array_keys($empty)); 
+0

這是最簡單的解決方案,因爲我有各種數量的變量需要處理,它們都進入函數,所以我只需要將函數調用複製到$ arr – Yenky

1

對於這種情況,我會建議你使用開關,這是幹嘛呢,像這樣的更優化的方式:

$empty = ""; 
switch ($empty) { 
    case $a: 
     echo "a is empty" 
     break; 
    case $b: 
     echo "b is empty" 
     break; 
    case $c: 
     echo "c is empty" 
     break; 
    default: 
     echo "nothing is empty"; 
} 
+0

你的答案和他的代碼有什麼區別? –

+0

switch語句的性能優於if語句,因爲如果條件數量越來越多,特別是速度更快,因爲如果代碼將檢查並移至下一個條件。然而,通過轉換,每一次比較都將成爲對等的測試,而唯一改變的是你正在比較的價值。 –

+0

我完全同意這個答案,switch語句會表現得更好。 –

1

個人而言,我可能會使用variable variable。但是,這只是因爲我喜歡他們,有的沒有

// the variables somewhere else in your code 
$a = 1; 
$b = null; 
$c = ''; 
$d = 4; 


// do your check 
$arr = ['a','b','c','d']; // the names of the variables you want to check 

foreach($arr as $var) { 
    if(empty($$var)) { 
     echo $var . ' is empty'.PHP_EOL; 
    } 
} 

將輸出

b爲空
c是空

example

4

你可以去爲每個條件設置一個變量並輸出此

if ((($t = 'a') && empty($a)) || (($t = 'b') && empty($b)) || (($t = 'c') && empty($c)) || (($t = 'd') && empty($d))) { 
    echo "{$t} is empty"; 
} else { 
    // run code with a,b,c,d 
} 

分配($t='a|b|c|d')將永遠是真實的,它的testet變種是空的情況將失敗,因爲在條件

true && false但在可讀性方面我寧願與任何其他的答案中去。

1

使用array_search()

<?php 
$arr = array('a'=>1,'b'=>2,'c'=>null,'d'=>4); //make an array of variables 
echo "Null variable : ".array_search(null, $arr); // check for null item 
?> 

這將輸出:

Null variable : c