2012-06-16 35 views
0

可能重複:
Coalesce function for PHP?PHP中的貫穿變量賦值?

我不知道這是什麼通常被稱爲,但我希望標題溝通不夠好。我擁有的是一些變量,其中一些可能爲空。

我想做的事:

$a = $b || $c || $d; 

其中$一個最終被=的第一個非空的變量。

+0

您是否試圖將b或c或d的內容分配給a:\? – theBigChalk

+2

錯誤的語言。它可以在Ruby或JavaScript中工作。在PHP,AFAIK中,您需要使用trinary運算符並編寫'$ b!== null? $ b:($ c!== null?$ c:$ d)' – Amadan

+0

另請參閱:http://stackoverflow.com/questions/1013493/coalesce-function-for-php – Wrikken

回答

4

據我所知,PHP不支持JavaScript的相同方式。

你可以,但是做這樣的事情:

$a = $b ? $b : ($c ? $c : $d); 

一個更通用的解決方案:

function fallthrough($arr) { 
    //$arr should be an array of possible values. The first non-null value is returned 
    do $a = array_shift($arr); 
    while($a === null && $arr); 
    return $a; 
} 
+0

那麼,什麼是最好的方法在PHP中做到這一點?顯然,我不能僅僅嵌套三元運算符,因爲這會帶來更多變量的瘋狂。我只是有一個很大的elseif塊嗎? – Joren

+0

小心 - 如果'$ b'爲'「0」',它會通過。更確切地說,它會通過任何虛假的價值。如果你真的只需要'null'來通過,你需要明確地測試。 – Amadan

+0

你可以做的是定義一個函數。我將用解決方案編輯我的答案。 –

3
<?php 
$a = 0; 
$b = false; 
$c = true; //should become this 
$d = '1'; 
$e = $a ?: $b ?: $c ?: $d; 
var_dump($e); 
//bool(true) 

//should be '1' if order is different 
$e = $a ?: $b ?: $d ?: $c; 
var_dump($e); 
//string(1) "1" 

...但是?:還挺新的,你會混淆你的同事/編碼人員。

+0

哦,如上所述:在所有的謬誤值上失敗,而不僅僅是NULL。 – Wrikken

0

我不認爲這是可能的。我認爲你不得不使用其他更加費力的方式。即使變量數組,遍歷它,直到你找到一個非空值,並打破循環,就像這樣:

$vars = array("b" => $b, "c" => $c, "d" => $d); 

foreach($vars as $var) { 
    if($var != null) { 
     $a = $var; 
     break; 
    } 
} 

嗯,就像這裏的一些其他的答案說,你可以用文字的速記方法這個,但是編寫可讀代碼也很重要。上面的代碼是非常可讀的。