php三元运算符混淆

时间:2012-02-17 23:08:04

标签: php if-statement ternary-operator

这让我失去理智,所以请帮助:

$param[] = ($k == 'page') ? (($i > 1) ? "{$k}-{$i}" : null) : "{$k}-{$v}";

我想要的是:

if ($k == 'page')
    if ($i > 1)
        $param[] = "{$k}-{$i}";
    else
        $param[] = null;
else
    $param[] = "{$k}-{$v}";

谢谢!

2 个答案:

答案 0 :(得分:3)

首先引用ternary operator上的php手册:

  

建议您避免“堆叠”三元表达式。 PHP的   在单个中使用多个三元运算符时的行为   陈述不明显

这就是if语句的用法...当你需要再次阅读代码时,你会遇到问题...但如果你坚持:

$param[] = (($k == 'page') ? (($i > 1) ? "{$k}-{$i}" : null) : "{$k}-{$v}")

始终在这些情况下使用括号。

答案 1 :(得分:0)

出于好奇,这个更清楚:

$param[] = ($k == 'page') ? ( ($i > 1) : 'page-'.$i : null ) : $k.'-'.$v;

你真的想插入null吗?

修改

你想要这个:

($k == 'page' && $i > 1) ? $params[] = 'page-'.$i : $params[] = $k.'-'.$v;

$params[] = ('page' == $k && 1 < $i) ? 'page-'.$i : $k.'-'.$v;

但是!不要这样做。

相反,只需保持简单并执行:

if('page' == $k && 1 < $i) {
 // some comment
 $params[] = 'page-'.$i;
} else {
 // some comment
 $params[] = $k.'-'.$v;
}