php三元运算符混淆

发布于 2025-01-06 13:31:28 字数 315 浏览 1 评论 0原文

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

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

谢谢!

This is making me lose my mind, so please help:

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

what I want is:

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

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执笏见 2025-01-13 13:31:28

首先引用三元运算符<的php手册/a>:

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

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

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

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

First of all quote from php manual on ternary operator:

It is recommended that you avoid "stacking" ternary expressions. PHP's
behaviour when using more than one ternary operator within a single
statement is non-obvious

That's what if statement is for... When you will need to read the code again later you'll have problems... But if you insist:

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

Always use brackets in those cases.

Spring初心 2025-01-13 13:31:28

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

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

Out of curiosity, is this clearer:

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

Do you actually want to insert null, though?

EDIT:

I think you want this:

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

or

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

But! Don't do it.

Instead just keep it simple and do:

if('page' == $k && 1 < $i) {
 // some comment
 $params[] = 'page-'.$i;
} else {
 // some comment
 $params[] = $k.'-'.$v;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文