5

変数を値に設定したいのですが、条件が真の場合に限ります。
次の代わりに:

if($myarray["foo"]==$bar){  
    $variablename=$myarray["foo"];  
}  

変数名が長い場合、または配列が含まれる場合、これは非常に長くなる可能性があります。私がやりたいことは非常に単純です。条件が真の場合は値を設定します。

次のような条件演算子を使用したいと思います。

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......

しかし、ステートメントがfalseの場合、変数をまったく設定したくないため、これは失敗します。

基本的に、私がやろうとしているのは、最初の例を短くすることです。おそらく、条件演算子は方法ではありません...

誰か提案はありますか?

4

9 に答える 9

12

それは以下よりもはるかに短くなることはありません:

if($condition) $var = $value;
于 2009-07-16T16:16:33.467 に答える
8

IMO、コードサンプルを短くする最良の方法は次のとおりです。

if($myarray["foo"] == $bar)
    $variablename = $myarray["foo"];

参考までに、あなたが尋ねている演算子の名前は「三項演算子」ではなく、条件演算子です。

あなたが尋ねているので、あなたが実際にあなたが求めていることをするために条件演算子を使うことができる方法は次のとおりです:

$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;

しかし、それはやや恐ろしく醜く、非常に保守不可能です。

于 2009-07-16T16:15:25.747 に答える
3

あなたはこれを行うことができますが、それはかなり読みにくく、ばかげているので、私はしません:

$myarray["foo"] == $bar ? $variablename = $myarray["foo"] : 0;

また

$myarray["foo"] == $bar && $variablename = $myarray["foo"];
于 2009-07-16T16:18:41.077 に答える
2

あなたの権利、三部形式は行く方法ではありません。ステートメントのifとelseの部分を処理するためにあります。

通常のifステートメントに固執するだけです。

if($myarray["foo"]==$bar) $variablename=$myarray["foo"];
于 2009-07-16T16:15:40.147 に答える
2

あなたが抱えている「問題」は、実際には問題ではありません。サンプルコードは非常に明確で保守可能です。私は本当にそれをそのままにしておくと言いたいです。

ブレースを削除することもできますが、保守性に影響します。

もう 1 つの方法は、 set_if_true(mixed array, string key, boolean conditional) ラッパー関数を作成することです。実際に何が起こっているかを隠しますが、特定の実装によっては良いオプションです。(たとえば、構成タイプのオブジェクト、またはキャッシュ バックエンド)

于 2009-07-16T16:45:54.467 に答える
0

falseの場合、変数をそれ自体に設定します。

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename
于 2009-07-16T16:15:02.813 に答える
0

三項演算の一部に元の式を入れることができますがelse、式の単一の評価を保証したい場合は、一時変数とifステートメントを使用する必要があります。

于 2009-07-16T16:16:18.037 に答える
0

三進法が機能するように書くことはできますが、三進法はその方法ではありません。

その理由は次のとおりです。意図しない方法で使用しようとしており、他の開発者がコードを読みにくくする可能性があります。

于 2009-07-16T16:16:36.867 に答える