23

我正在尝试将以下代码转换为三元运算符,但它不起作用,我不确定为什么。我认为我的问题是我不知道如何以elseif三进制格式表达操作。根据我的理解,elseif它的执行方式与if使用 format 的操作相同: (condition) ? 'result'

if ($i == 0) {
    $top = '<div class="active item">';
} elseif ($i % 5 == 0) {
    $top = '<div class="item">';
} else {
    $top = '';
}

$top = ($i == 0) ? '<div class="active item">' : ($i % 5 == 0) ? '<div class="item">' : '';
4

3 回答 3

58
$top = ($i == 0) ? '<div class="active item">' : (($i % 5 == 0) ? '<div class="item">' : '');

您需要在整个 else 块周围添加括号

于 2012-10-31T16:11:01.433 回答
18

三元运算符不支持真正的if... else if... else...运算;但是,您可以使用以下技术模拟行为

var name = (variable === 1) ? 'foo' : ((variable === 2) ? 'bar' : 'baz');

我个人并不关心这一点,因为我觉得它没有更具可读性或优雅性。我通常更喜欢这种switch说法。

switch (variable) {
    case 1 : name = 'foo'; break;
    case 2 : name = 'bar'; break;
    default : name = 'bas'; break;
}
于 2012-10-31T16:21:29.523 回答
4

分享一些观点可能为时已晚,但尽管如此:)

  1. 使用 if - else if - else 进行有限数量的评估。我个人更喜欢在比较次数小于 5 时使用 if - else if - else。
  2. 在评估次数更多的情况下使用 switch-case。就我个人而言,我更喜欢案例超过 5 个的 switch-case。
  3. 在考虑单个比较(或循环时进行单个比较)或在 switch 结构的“case”子句中需要 if-else 比较时使用三元。
  4. 在对非常大的数据集进行循环时进行比较时,使用三进制会更快。

恕我直言,最终由开发人员决定代码可读性和性能之间的权衡等式,进而决定三元与 if else-if else 与 switch-case 中的哪些内容可以在任何特定情况下使用。

于 2015-12-25T07:29:49.033 回答