如何将此if else语句转换为三元运算符?

问题描述:

我有一段代码,我想将它转换为三元运算符。谁能帮忙?它有1条if和2条件,所以我很难转换它。这是我的代码。如何将此if else语句转换为三元运算符?

if ($this->session->data['desired_service']==1){ 
    echo 'Home Delivery'; 
} else if ($this->session->data['desired_service']==2){ 
    echo 'Take Away'; 
} else if ($this->session->data['desired_service']==3){ 
    echo 'DinIN'; 
} 

这是我迄今使用的代码。

$service = ($this->session->data['desired_service']== 1) ? "Home Delivery" : ($this->session->data['desired_service'] == 2) ? "Take Away" : ($this->session->data['desired_service'] == 3) ? "DinIN"; 

但它给了我一个语法错误。

+2

我只有一件事要说:不要。它使你的代码难以阅读和丑陋。 – Daan

+1

不要......嵌套的三元组不直观,难以阅读....如果你现在这样做,你会在6周内诅咒自己,当你需要改变它 –

+0

你可以去开关案件,但嵌套三元将很难理解... –

echo ($this->session->data['desired_service'] == 3) ? 'DinIN' : (($this->session->data['desired_service']==1) ? 'Home Delivery' : ($this->session->data['desired_service'] == 2) ? 'Take Away' : ''); 

说明:

使用嵌套三元运算符。

If variable equal to 3, print 'DinIN'  
else : two cases: 
if 1 : Home Delivery 
else : Take Away 

演示:

if value is 1

If value is 2

if value is 3

另一种解决方案

使用预定义的数组:

获取阵列中的所有选项,并添加

1,2和3键。使用isset和变量检查数组。

如果已设置,则打印它,否则为空。

目的解决了。

<?php 
$arr = array(); 
$arr[1] = 'Home Delivery'; 
$arr[2] = 'Take Away'; 
$arr[3] = 'DinIN'; 
echo isset($arr[$this->session->data['desired_service']]) ? $arr[$this->session->data['desired_service']] : ''; 
?> 
+1

我希望值只能在1,2和3上。任何其他值都应该产生空值。那可能吗? –

+0

回答更新,请检查。它将适用于您的查询。 – Pupil

+1

完美!谢谢@Pupil –

这不是什么时候使用三元运算符的好例子。就个人而言,查看您的数据 - 我会使用switch语句,因为它会更容易阅读并添加更多选项。

switch($this->session->data['desired_service']){ 

    case '1': 
     $service = "Home Delivery"; 
     break; 

    case '2': 
     $service = "Take Away"; 
     break; 

    case '3': 
     $service = "DinIN"; 
     break; 

} 
+0

在任何情况下,答案总是最后的选择。 :( –

+0

不幸的是,这是行不通的。三元运算符在PHP中是左联想的,这意味着这将评估“从右到左”,你必须使用缺少的。 – hanzi

+0

你的开关速度比我快一点...不错的+1 –