2017-04-10 123 views
0
function get_status($data) { 
    return ($data->cm_status == 'Y') ? 'Active' : 
     ($data->cm_status == 'N') ? 'Inactive' : '-';  
} 

我應該得到Active如果$data->cm_statusY我正在用這個三元運算符做什麼錯誤?

我應該得到Inactive如果$data->cm_statusN

我應該得到-如果$data->cm_status是別的

但實際上在所有的情況下,我得到Inactive

我在做什麼錯誤?

引用你的答案讚賞

+0

總是將每個更深的條件包裝在'()''false? 'foo':(true?'bar':'bobby')',其保存方式 – JustOnUnderMillions

+1

在我看來,使用嵌套的三元運算符應該被鼓勵,特別是如果你關心可讀性的話。如果你使用清楚的if/else/switch/case來代替,你會幫助你和其他潛在的開發者。 –

回答

0

在嵌套三元運算符複合之一應該是一對括號內的情況。所以試試這個;

function get_status($data) { 
    return ($data->cm_status == 'Y') ? 'Active' :(($data->cm_status == 'N') ? 'Inactive' : '-') 
} 

注意第二個三元條件運算符中的「()」。

0

使用此:

function get_status($data) { 
    return ($data->cm_status == 'Y') ? 'Active' : 
     (($data->cm_status == 'N') ? 'Inactive' : '-');  
} 
3

您需要包裝內三元運算符括號內爲被正確產生的結果,這樣

function get_status($data) { 
    return $data->cm_status == 'Y' ? 'Active' : 
     ($data->cm_status == 'N' ? 'Inactive' : '-'); 
} 

更具可讀性的方法可以是使用相反,使用嵌套的三元運算符很容易混淆,導致更多的混亂,而不是解決它。一個switch看起來像這樣

function get_status($data) { 
    switch ($data->cm_status) { 
     case "Y": 
      return 'Active'; 
     case "N": 
      return 'Inactive'; 
     default: 
      return '-'; 
    } 
} 

這也假定輸入將永遠是大寫,您可以添加額外的代碼進行比較,無論其是否大寫或小寫。