2012-02-17 14 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

+0

実際に$ {param配列に文字列値 "{$ k} - {$ v}"を挿入しようとしていますか? – ngen

+1

より冗長な制御構造を維持してください。わかりやすいものは「コードの行数が少ない」より重要です。 – simshaun

答えて

0

が、これは明確である:

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

あなたが実際にかかわらず、ヌルを挿入しますか?

EDIT:

($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

は実際にはありませんが、鎖状の三項体に何かを挿入するのをスキップするにはどうすればよいですか? –

+0

上記の編集がより適切ですか? – MyStream

+0

です!ありがとうございました! :) –

3

ternary operator上のPHPマニュアルの全ての引用の最初に:

あなたが三式を「スタッキング」を避けることをお勧めします。単一 文の中で複数の三項演算子を使用してPHPの 動作は

だ非自明である何文がために...あなたは再びコードを読む必要があります場合は、後であなたは問題があるでしょうである場合。 ..しかし、あなたが主張する場合:これらの例で

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

必ず使用ブラケットを。

好奇心のうち
+0

あなたは本当にその程度までかっこする必要はありません。とにかに、課題全体をブラケットするのはどのような目的ですか?読みやすさを向上させません。 – Kenaniah

+0

@Kenaniah '($ i> 1)の括弧を見落としましたか? "{$ k} - {$ i}":nul'の質問 – Vyktor