2012-02-17 76 views
0

这让我失去了我的心,所以请大家帮忙:PHP三元操作混乱

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

谢谢!

+5

你为什么要杀死像小猫? – Vyktor 2012-02-17 23:09:41

+0

你真的想要在$ param数组中插入字符串值“{$ k} - {$ v}”吗? – ngen 2012-02-17 23:10:31

+1

留下更详细的控制结构。易于理解远远超过“少量代码”。 – simshaun 2012-02-17 23:11:17

回答

0

出于好奇,这是清晰的:

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

你确实要插入空,有关系吗?

编辑:

认为你想这样的:

($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; 
} 
+0

不,实际上我不知道,但是我怎样才能跳过插入链式三元组中的东西? – 2012-02-17 23:20:46

+0

上面的编辑更适合吗? – MyStream 2012-02-17 23:28:41

+0

它呢!谢谢! :) – 2012-02-17 23:29:45

3

从PHP手册中的所有报价首先对ternary operator

建议您避免“堆积”三元表达式。单 语句中使用多个三元运算符时,PHP的 行为并不明显

这就是if语句是...当你需要重新阅读代码后,你就会有问题。 ..但是如果你坚持:

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

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

+0

你真的不需要在这个范围内支架。包括整个任务的目的是什么?完全不提高可读性。 – Kenaniah 2012-02-17 23:21:16

+0

@Kenaniah我忽略了'($ i> 1)周围的括号? “{$ k} - {$ i}”:nul'在他的问题 – Vyktor 2012-02-17 23:22:34