はじめに
配列を扱う際に、存在しないものを指定するとNoticeを吐いてしまう
そこでPHP7から追加されたNull合体演算子「??」が便利だった PHP公式
利用できる場面が多そうなので自分のためにもまとめ
実装例1
第一候補に無かったら第二候補をあたってみる みたいな使い方
下の例では__第一候補→第二候補→第三候補__であたっていく
$a = [0=>'red',1=>'blue',4=>'green'];
$b = [2=>'yellow', 5=>'white'];
$c = [3=>'black'];
$all = [];
for ($i=0; $i<=5; $i++) {
$all[$i] = $a[$i] ?? $b[$i] ?? $c[$i];
}
var_dump($all);
出力結果
array(6) {
[0]=>
string(3) "red"
[1]=>
string(4) "blue"
[2]=>
string(6) "yellow"
[3]=>
string(6) "black"
[4]=>
string(5) "green"
[5]=>
string(5) "white"
}
実装例2
__無かったらデフォルト値__みたいな使い方
今回はデフォルト値を0として、テストの点数の集計みたいな使い方
(例が悪いので精進します)
$hanako = ['english'=>80, 'social'=>67];
$taro = ['english'=>71, 'science'=>97];
$jiro = ['social'=>55, 'english'=>60, 'mathematics'=>32, 'japanese'=>29];
$subjects = ['english', 'social', 'science', 'mathematics', 'japanese'];
$sums = [];
foreach ($subjects as $subject) {
$sums[$subject] = ($hanako[$subject] ?? 0) + ($taro[$subject] ?? 0) + ($jiro[$subject] ?? 0);
}
var_dump($sums);
出力結果
array(5) {
["english"]=>
int(211)
["social"]=>
int(122)
["science"]=>
int(97)
["mathematics"]=>
int(32)
["japanese"]=>
int(29)
}
まとめ
- 今まで三項演算子を使って実現していたのがすごく簡潔にかけるようになった
- nullかどうか調べるのもissetを使わずにすぐやりたいことを書ける
- *いくつも繋げられるので楽(可読性との天秤)