我使用三元運算符很多,但我似乎無法將多個三元運算符堆疊在一起。如何在PHP中連接多個三元運算符?
我知道,堆疊多個三元運算符將使代碼更不可讀但在某些情況下,我會 喜歡做到這一點。
這是我到目前爲止已經試過:
$foo = 1;
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
echo $bar; // display 2 instead of 1
什麼是正確的語法?各地各內三元操作
我使用三元運算符很多,但我似乎無法將多個三元運算符堆疊在一起。如何在PHP中連接多個三元運算符?
我知道,堆疊多個三元運算符將使代碼更不可讀但在某些情況下,我會 喜歡做到這一點。
這是我到目前爲止已經試過:
$foo = 1;
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
echo $bar; // display 2 instead of 1
什麼是正確的語法?各地各內三元操作
這些括號是什麼,我認爲是讓你。
嘗試
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
認沽括號,這樣操作者優先保證:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
添加括號:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
你可以正確因此這樣寫:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
(即:簡單地嵌入在括號中的 '內部' 三元運算符)
但是,我真的會真的不想做這件事,因爲它的可讀性非常可疑,而且已經被嚴重污染了 - 從來沒有任何理由混淆代碼,並且與此相關。
問題是,與所有其他語言不同,PHP 使條件運算符左關聯。這會破壞你的代碼 - 這在其他語言中會很好。
你需要使用括號:
$bar = $foo == 1 ? "1" : ($foo == 2 ? "2" : "other");
(請注意,我已經移除代碼其它括號,但這些都是正確的,只是冗餘)
「_Notice我已經從你的代碼中刪除了其他括號;但是這些都是正確的,只是冗餘_」 - 但是用這樣的解析器,你永遠無法確定... ;-) – Alnitak 2011-06-01 15:06:43
你需要周圍的一些括號右手操作:
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
PHP解釋器壞了,處理您行:
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
作爲
$bar = (($foo == 1) ? "1" : ($foo == 2)) ? "2" : "other";
並自該左手錶達式評估爲「真」的剩餘三元運算符的第一操作數(「2」)代替返回。
剛堆起來的括號,你知道了:
$bar = ($foo==1? "1" : ($foo==2? "2" : "other"));
順便說一句,如果你有很多條款,你應該考慮使用switch
:
switch ($bar) {
case 1: echo "1";
case 2: echo "2";
default: echo "other";
}
如果開關變長,可以將其封裝在一個函數中。
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
只需使用額外的(),它會工作的
可能重複[嵌套PHP三元麻煩:三元輸出=如果 - 否則(http://stackoverflow.com/questions/4807454/nested -php-ternary-trouble-ternary-output-if-else) – 2011-06-01 15:05:23
大家都很好回答。 – Cybrix 2011-06-01 15:22:49