2014-06-18 29 views
1

我想要一種方法來簡化將兩個值連接在一起的if/else語句,但也會在使用變量之前檢查空值。簡化一個帶空檢查的If/Else語句

例如:

if (isset($A,$B)) { 
    $C = $A . $B; 
} 
elseif(isset($A)) { 
    $C = $A; 
} 
elseif(isset($B)) { 
    $C = $B; 
} 

之前$B串聯$A我需要確保既不是NULL。如果它們都包含一個值,那麼我想將連接分配給變量$C。如果任一值爲空,那麼我只需要將一個值分配給$C

上面的工作正常,當我只有兩個變量,但如果第三個變量$D被添加,我需要連接到$C,仍然檢查空值。然後我需要首先檢查ABD,然後是AB,然後是BD,然後是A,然後是B,然後是D.它會變得非常不規範。

那麼,如何在必要時簡化代碼並允許將來添加更多變量?

+1

而不是每個都是一個不同的變量,你可以將每個值推送到一個數組並使用'implode()'爲你做連接嗎?這樣你就不必檢查。數組中存在的內容將被連接起來。什麼不存在不會被連接... – War10ck

+0

@ War10ck這很好!謝謝! – Keven

回答

4

如何如下:

<?php 
    $a=NULL; 
    $b="hello "; 
    $c=NULL; 
    $d="world\n"; 
    $all = implode(array($a,$b,$c,$d)); 
    echo $all; 
?> 

這將打印

hello world 

沒有任何錯誤。這是@ wor10ck提出的評論的實現 - 但他似乎沒有提供完整的答案/示例,我認爲他的建議值得充實。

編輯對於誰不讀評論人 - @Keven結束了使用

$result = implode(array_filter($array)); 

這是一個很好的可靠的方法去除數組中的NULL元素。

+0

很好的解決方法 – Benedictus

+0

是的,這可以很好地工作... – Keven

+0

@弗洛里斯你能解釋爲什麼我不需要檢查NULL值時,內爆?或者至少爲什麼'NULL'值插入這個數組時不會拋出錯誤? – Keven

2
$C = (isset($A) ? $A : '') . (isset($B) ? $B : '') . (isset($D) ? $D : ''); 
2

可能發現這個有用

$C = ""; 
$C .= (isset($A) ? $A : "").(isset($B) ? $B : ""); 

問號運營商之前返回左邊部分:標誌,如果聲明是真實的,正確的,如果假的。 Hoever i 認爲表示嵌套語句如果塊更加優化。

0
<?php 
// I assume $res is the variable containing the result of the concatenations 
$res = ''; 

if(isset($a)) 
    $res .= $a; 
if(isset($b)) 
    $res .= $b; 
if(isset($c)) 
    $res .= $c; 
// ... 
0
$A = 'a'; 
$B = 'b';  

$C = ''; 
$C .= isset($A) ? $A : ''; 
$C .= isset($B) ? $B : ''; 
$C .= isset($D) ? $D : ''; 

echo $C;