【问题标题】:How can I convert this if else statement into ternary operator? [duplicate]如何将此 if else 语句转换为三元运算符? [复制]
【发布时间】:2015-11-02 11:05:10
【问题描述】:

我有一段代码,我想将它转换为三元运算符。任何人都可以帮忙吗?它有 1 个 if 和 2 个 else if 条件,所以我无法转换它。这是我的代码。

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";

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

【问题讨论】:

  • 我只有一件事要说:不要。它使您的代码不可读和丑陋。
  • 不要……嵌套三元组不直观,而且难以阅读……如果你现在这样做,你会在 6 周内诅咒自己改变它
  • 你可以使用 switch case,但是嵌套三元将很难理解......
  • 我使用了if else,但需要通过三元运算符来完成。

标签: php ternary-operator


【解决方案1】:

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

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

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

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

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

}

【讨论】:

  • 在任何情况下,答案总是最后的选择。 :(
  • 很遗憾,这行不通。三元运算符在 PHP 中是左结合的,这意味着这将评估“从右到左”。你必须使用括号。
  • 你在 switch 上比我快一点...不错 +1
  • @MarkBaker 我同意 - 它的丑陋,但如果你添加括号它确实有效:$service = ($desired_service == 1 ? "Home Delivery" : ($desired_service == 2 ? "Take Away" : ($desired_service == 3 ? "DinIN" :'')));
【解决方案2】:
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,2 和 3 上。任何其他值都应该产生空值。这可能吗?
  • 答案已更新,请检查。它适用于您的查询。
  • 完美!谢谢@Pupil
猜你喜欢
  • 2021-07-09
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2017-05-30
  • 2020-09-23
  • 1970-01-01
  • 2016-05-22
  • 2021-02-22
相关资源
最近更新 更多