26
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

実装例:PHPのnull合体演算子で「無かったら」の処理が簡単

はじめに

配列を扱う際に、存在しないものを指定すると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を使わずにすぐやりたいことを書ける
  • *いくつも繋げられるので楽(可読性との天秤)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
26
Help us understand the problem. What are the problem?