LoginSignup
28
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-09

はじめに

配列を扱う際に、存在しないものを指定すると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を使わずにすぐやりたいことを書ける
  • *いくつも繋げられるので楽(可読性との天秤)
28
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27