2011-03-22 56 views
0

为什么这个短的if-else逻辑

$count = 0; 
    echo $count === 0 
    ? 'zero' 
    : $count === 1 
    ? 'one' 
    : 'more'; 

回声1?它不应该回应零?

+2

请不要滥用三元运算符这种方式。这比简单的'if/else'结构要清晰得多,任何维护你的代码的人(包括你自己三个月后)都会恨你。 – meagar 2011-03-22 19:10:46

+0

@meagar,谢谢你的建议! – lam3r4370 2011-03-22 19:12:08

回答

3

利用括号!

echo ($count === 0 ? 'zero' :($count === 1 ? 'one': 'more')); 

之所以你的版本相呼应“一”是因为PHP认为第一?是语句的一部分,因此如果$count等于零做最后可能的事(最后?),这是'one'

阅读了关于this

+0

我看了这个问题。我给出了答案,为什么它回响一个。和我给了一个版本,回应他真正想要的版本 – Neal 2011-03-22 19:06:28

+0

http://php.net/manual/en/language.operators.comparison.php三元运算符 – 2011-03-22 19:06:43

1

虽然这是价值观的一个漂亮的短名单,你可以选择使用地图:

$map = array("zero", "one", "more"); 
echo $map[min($count,2)];  // trick: 2 becomes max value via min()