如何在PHP中连接多个三元运算符?

时间:2011-06-01 14:43:14

标签: php ternary-operator

我使用三元运算符但我似乎无法将多个三元运算符堆叠在一起。

我知道堆叠多个三元运算符会使代码不那么可读但在某些情况下我会 喜欢这样做。

这是我到目前为止所尝试的:

$foo = 1;
$bar = ( $foo == 1 ) ? "1" : ( $foo == 2 ) ? "2" : "other";
echo $bar; // display 2 instead of 1

正确的语法是什么?

8 个答案:

答案 0 :(得分:27)

这些括号是我认为会给你的。

尝试

$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2)  ? "2" : "other");
echo $bar;

答案 1 :(得分:18)

问题是PHP,与所有其他语言不同,使条件运算符保持关联状态。这会破坏你的代码 - 这在其他语言中会很好。

您需要使用括号:

$bar = $foo == 1 ? "1" : ($foo == 2 ? "2" : "other");

(请注意,我已从代码中删除了其他括号;但这些是正确的,只是多余的。)

答案 2 :(得分:8)

手操作数周围需要一些括号:

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

并且因为左手表达式的计算结果为“true”,所以返回剩余三元运算符(“2”)的第一个操作数。

答案 3 :(得分:4)

你可以正确地写这个:

$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");

(即:简单地将'内部'三元运算符嵌入括号中。)

然而,我确实

答案 4 :(得分:3)

在每个内部三元运算符周围加上括号,这样可以确保运算符优先级:

$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");

答案 5 :(得分:2)

添加括号:

$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");

答案 6 :(得分:2)

只需叠加括号,你就可以了:

$bar = ($foo==1? "1" : ($foo==2? "2" : "other"));

顺便说一句,如果你有很多条款,你应该考虑使用switch

switch ( $bar ) {
  case 1:  echo "1";
  case 2:  echo "2";
  default: echo "other";
}

如果开关变长,可以将其包装在函数中。

答案 7 :(得分:2)

$foo = 1;
$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");
echo $bar;

只需使用extra()即可使用