【问题标题】:php ternary operator confusionphp三元运算符混淆
【发布时间】:2012-03-09 08:27:39
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 你为什么要那样杀小猫?
  • 你真的在尝试将字符串值 "{$k}-{$v}" 插入 $param 数组吗?
  • 继续使用更详细的控制结构。易于理解远胜过“更少的代码行”。
  • 为什么不直接使用多行版本?
  • 它应该 sigh 工作.. 也许你需要 $k === 'page'。你应该告诉我们出了什么问题

标签: php if-statement ternary-operator


【解决方案1】:

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

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

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

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

总是在这些情况下使用括号。

【讨论】:

  • 你真的不需要括号到那种程度。无论如何,将整个作业括起来有什么目的?根本没有提高可读性。
  • @Kenaniah 我在他的问题中忽略了($i > 1) ? "{$k}-{$i}" : nul 周围的括号
【解决方案2】:

出于好奇,这是否更清楚:

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

【讨论】:

  • 不,实际上我没有,但是我如何跳过在链式三元组中插入一些东西?
猜你喜欢
  • 2014-02-08
  • 2012-02-13
  • 2020-10-25
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多