2012-10-26 16 views
9

これは機能しませんか?それとも間違っているのですか?複数のバリエーションを試してみましたが、被写体に関する確かな情報が見つからないようです。何か案は?連結の途中のif文?

$given_id = 1; 
while ($row = mysql_fetch_array($sql)) 
{ 
    if ($i < 10){ 
    $display = '<a href="' . $row['info'] . '" onMouseOver="' . if($row['type']=="battle"){ . 'showB' . } else { . 'showA'() . "><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;" id="' . $given_id . '"></div></a>'; 
+0

なぜあなたはとにかくそのような読めないコードを書きたいのでしょうか?コードを適切に配置すると、プロセスのエラーを修正する可能性が高くなります。 'sprintf'を使って始めてください – Gordon

+0

なぜこの質問が地理、時間、または異常な状況と関係しているのか分かりません。三項演算子x?y:zの考え方は、多くの状況でよく使われています。このページでは、PHPがこの機能を提供しているかどうかを探しています。幸いにも、このページはまだ存在していたにもかかわらず、私のクエリを解決することができました。 – dvaey

答えて

26

の場合は自立文です。それは完全な声明のようです。だから、文字列の連結の間にそれを使うことはできません。 より良い解決策は、これはまた、文字列の連結に使用することができ速記三元を使用することですoperatior

(conditional expression)?(ouput if true):(output if false); 

。例:

$i = 1 ; 
    $result = 'The given number is'.($i > 1 ? 'greater than one': 'less than one').'. So this is how we cuse ternary inside concatenation of strings'; 

あなたはまた、ネストされた三項演算子を使用することができます。

$i = 0 ; 
    $j = 1 ; 
    $k = 2 ; 
    $result = 'Greater One is'. $i > $j ? ($i > $k ? 'i' : 'k') : ($j > $k ? 'j' :'k').'.'; 
+4

その最後の行の読みやすさは、 '' 1 '2'( 'x'> 'flowers'?0:3)の結果とほぼ等しいと思う:($ j> 42?ceil(pi)):$ kittens = true)-1) ' – Mike

+0

-1;最初のいくつかの文章では、*文*と*式*を区別していますが、実際には説明していない "自立文"と "完全文"というメークアップ用語を使用しますなぜ 'if'構造体を文字列に連結することができないのか? –

6

if..else声明あると表現内で使用することはできません。あなたが望むのは、 "三元" ?:演算子:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternaryです。

+1

私はちょうど宝くじに当選したような気がします。 – VVV

+0

三項演算子はいいですが、コードを読みにくくする可能性があります。それが理にかなっているところでそれを使用してください。誰かがあなたのコードを読んでいるのであれば、それをまったく使用しないことを検討したいかもしれません。 – sgroves

+7

@VVVあなたはマニュアルへのリンクを獲得しました。それを賢明に使う。 – deceze

1

ifの "三項演算子" を参照してくださいステートメントです。文の中に文を入れることはできません。

$str = 'foo'; 
if (cond) 
{ 
    $str .= 'bar'; 
}; 
$str .= 'baz';