2009-07-01 5 views
0

誰かが次のものを私のために3者に変換できますか?ElseからTernaryに変換する

if ($idd == 1521) { 
return "Home<br /><img src=\"images/b-value.gif\" /><br />Best for Value"; 
} 
else if ($idd == 1595) { 
return "Home<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads"; 
} 
else if ($idd == 1522) { 
return "Business<br /><img src=\"images/b-value.gif\" /><br />Best for Value"; 
} 
else if ($idd == 1596) { 
return "Business<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads"; 
} 
else if ($idd == 1523) { 
return "Voice Product<br /><img src=\"images/vstream200.gif\" /><br />4 Guaranteed Calls"; 
} 
else if ($idd == 1524) { 
return "Voice Product<br /><img src=\"images/vstream350.gif\" /><br />7 Guaranteed Calls"; 
} 
else if ($idd == 1525) { 
return "Voice Product<br /><img src=\"images/vstream700.gif\"/><br />14 Guaranteed Calls"; 
} 
else 
return ""; 

ありがとうございます。

+10

括弧で囲まれた3桁の括弧は醜いので、予測できない結果につながる可能性があります。それをしないでください。 – cletus

+0

どのような理由があるのでしょうか? –

+0

なぜこれをやりたいですか? – Beska

答えて

26

3値演算子は、状況に応じて適切ではないようです。 のマッピングを使ってみませんか?

$map = array(
    1521 => array('Home', 'b-value.gif', 'Best for Value'), 
    1595 => array('Home', 'b-dload.gif', 'Best for Downloads'), 
    1522 => array('Business', 'b-value.gif', 'Best for Value'), 
    // and so on 
); 
if (array_key_exists($idd, $map)) { 
    $item = $map[$idd]; 
    echo "{$item[0]} <br/> <img src=\"{$item[1]}\"/> <br/> {$item[2]}"; 
} 

また、ファイルまたはデータベースからマップをプルすることもできます。

+1

+1、適切な答え –

+1

+1これは非常に良い選択肢でもあり、私の意見ではif/elseまたはswitchの方が望ましいです。 –

+0

これは適切な解決策ですが、これは質問が求めていることではありません。 – defines

5

なぜスイッチを使用しないのですか?

switch ($idd) { 
    case 1521 : return "Home<br /><img src=\"images/b-value.gif\" /><br />Best for Value"; 
    case 1595 : return "Home<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads"; 
    default: return ""; 
} 
+0

+1私にそれを打つ。私は今私を削除します。 –

2

私は、あなたがこのようなあなたのリターンを行うことができ、アレイ

$data = array(
    "_1521" => "Home<br /><img src=\"images/b-value.gif\" /><br />Best for Value", 
    "_1595" => "Home<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads", 
    "_1522" => "Business<br /><img src=\"images/b-value.gif\" /><br />Best for Value" 
    ); 

にそのようなものを置くのが好き:

return (array_key_exists("_$idd", $data) ? return $data[$idd] : ""); 

この全体のことは、この

のような機能であると仮定すると、
function getIddString($idd) { 
    $data = array(/*stuff from above*/); 

    return (/* stuff from above */); 
} 

これらの値のいずれかを取得する必要があるときはいつでも、どこででも呼び出すことができます。誰もがちょうどあなたが求めて何をして喜んでいるようだとして

+0

Doh。 Michalによって殴られた(http://stackoverflow.com/questions/1069499/convert-if-else-to-ternary/1069540#1069540) –

+1

キーの存在を確認することをお勧めします。 –

+2

と彼はさらに(正確には、今度は)3進数を得ます –

11

は、ここに三元です:

return ($idd == 1521 
    ? "Home<br /><img src=\"images/b-value.gif\" /><br />Best for Value" 
    : ($idd == 1595 
    ? "Home<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads" 
    : ($idd == 1522 
     ? "Business<br /><img src=\"images/b-value.gif\" /><br />Best for Value" 
     : ($idd == 1596 
     ? "Business<br /><img src=\"images/b-dload.gif\"/><br />Best for Downloads" 
     : ($idd == 1523 
      ? "Voice Product<br /><img src=\"images/vstream200.gif\" /><br />4 Guaranteed Calls" 
      : ($idd == 1524 
      ? "Voice Product<br /><img src=\"images/vstream350.gif\" /><br />7 Guaranteed Calls" 
      : ($idd == 1525 
       ? "Voice Product<br /><img src=\"images/vstream700.gif\"/><br />14 Guaranteed Calls" 
       : "" 
      ) 
     ) 
     ) 
    ) 
    ) 
) 
); 

しかし、他の皆と同じように、私はあなたがスイッチまたは配列マッピングを使用するかをお勧めします。

+4

Heh、そして今あなたは誰もそれをやって喜んでいた理由を参照してください。 – Chuck

+3

私の目!!!!!!!! –

+1

正規表現を置き換えてUltraEditを5秒間実行しました。私は自分では決してしませんが、真剣に、答えを出すのは難しいことではありません。 – defines

2

これらの数字は、データベースIDのように見えます。その場合、より保守的な解決策は、データベーススキーマを変更してそれらの文字列を格納し、IDに基づいて切り替えるのではなく、データベースから値を出力することです。

関連する問題