2016-05-17 14 views
0

$ dyまたは$ daysのいずれかの値を返そうとしています。時々$ dyが設定され、$日が設定されます。例えば複数の値を持つ3項複数条件

:私はこの文を実行すると$ DYの[「値」] 45または$日= [「値」] = 75 (一つだけ値が設定されます)

ただし値は常に同じです $ dyまたは$ daysのいずれかの実際の値を返すにはどうすればよいですか。

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null; 

答えて

1

について1:結果は常にブール値になりますので、

PHP、||では、あなたのJavaScriptから期待するかもしれない何をしません。 ||はオペランドを暗黙的にブール値に変換し、結果を返します。

PHPでJavaScriptから短絡||と同等のものを取得するには、?:使用することができます(いわゆる「エルビス演算子」 - x ?: yx ? x : yの省略形です):

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null; 

を私はdidnの最初の||を変更するのは本当にブーリアン操作なので変更しませんが、2番目のものを置き換えました。私はあなたがE_NOTICEエラーがで報告している場合$days['value']を設定し、$dy['value']ではないされている場合、あなたはまださえ$dy['value']にアクセスしているので、PHPは、とにかく文句を言うでしょうので、あなたのコード内の論理エラーが、とにかくあると思うしかし


isset($dy['value']) == false。 (。 - あなたはそれのように見える||を使用しているかに応じて、あなたもそれはfalsyだ場合は、値をスキップしたいと仮定)

あなたの場合

$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null); 

:だから、たとえば、使用する必要があります

$days = $dy['value'] ?: $days['value'] ?: null; 
+0

CherryDTロック!最高の詳細な答えの1つです... – no1uknow

+0

Thx!このオペレータが実際に何であるかについての説明が追加されました。 – CherryDT

0

3つの特別な理由がある場合は、特に注意してください(落胆します)。この場合、if elseifはおそらくもっときれいで読みやすくなります。

if (isset($dy['value'])) 
{ 
    $days = $dy['value']; 
} elseif (isset($days['value']) 
{ 
    $days = $days['value']; 
} 

それは絶対に三元でなければならない場合、あなたは三内の三元を必要とする:

$days = isset($dy['value']) ? $dy['value'] : (
      isset($days['value']) ? $days['value'] : null 
     ); 

あなたは(あなたがあるべきである)PHPを5.3+使用している場合、これはに動作するはずです

$days = $dy['value'] ?: ($days['value'] ?: null); 
0

私はこれは、あなたが欲しいものであるかもしれない推測:

$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null; 
関連する問題