22

次のような 3 つの値があります。

$a = null
$b = 3;
$c = null

(何が起こるかはわかりませんnull。おそらくすべてであるかもしれませんし、まったくないかもしれません。)

いわゆる遅延読み込みに続いて、最初の非 null 値を次のように割り当てようとしました。

$d = $a or $b or $c;

(JavaScriptのやり方と似ていますvar d = a || b;(aがなければbを代入します)。)

しかし、PHPではうまくいかないようです。

私はそれを間違っていますか、またはこれを行うための最良かつ最も簡単な方法は何ですか?

4

6 に答える 6

47

PHP 5.3 以降では、短い三項演算子を使用できます。

$d = $a ?: $b ?: $c;

これは JS のように型強制を行うことに注意してください。


更新 (PHP 7)

PHP 7.0+ では、次のようにします ( null coalescing- more informationと呼ばれます):

$d = $a ?? $b ?? $c;
于 2013-07-05T07:15:04.903 に答える
4

これを試して...

$d = array_filter(array($a, $b, $c))[0]; //newer PHP only

またはこれ:

$d = current(array_filter(array($a, $b, $c))); //warning about references

またはこれ:

$tmp = array_filter(array($a, $b, $c));
$d = current($tmp); //most safe
于 2013-07-05T07:15:58.613 に答える
1

変数を配列に入れることができれば、これが役立ちます:

$d = current(array_filter(array($a, $b, $c)));

または、これもアプローチになる可能性があります。

if(!empty($a)) {
 $d = $a;

} 

このチェックは、$bおよび$c

于 2013-07-05T07:14:38.263 に答える
1

PHPでは、次のようにできます:-

`<?php
 $a = 1;
 $b = null;
 $c = null;
 $d = $a ? $a:($b?$b:($c?$c:'null'));
echo $d;
?>`
于 2013-07-05T07:18:14.290 に答える
0

あなたは試すことができます:

$d = !is_null($a) ? $a : (!is_null($b) ? $b : $c);
于 2013-07-05T07:16:01.597 に答える