【PHP】多次元配列の存在チェックにおける isset と Null 合体演算子とエルビス演算子について

多次元配列でキーが存在しているかのチェックを頭から行うのが長いなと思って調べてたら、isset は一発で存在チェックしてくれると知りました。

<?php
$arr = ['a' => ['b' => 1]];

// isset
var_dump(isset($arr['a']));      // bool(true)
var_dump(isset($arr['a']['b'])); // bool(true)
var_dump(isset($arr['a']['c'])); // bool(false)
var_dump(isset($arr['d']));      // bool(false)
var_dump(isset($arr['d']['e'])); // bool(false)

同時に Null 合体演算子isset と同等のチェックを行うので、変数の初期化によく利用される エルビス演算子 より利用しやすいです。

<?php
$arr = ['a' => ['b' => 1]];

// エルビス演算子
var_dump($arr['a'] ?: false);      // array(1) {["b"]=> int(1)}
var_dump($arr['a']['b'] ?: false); // int(1)
var_dump($arr['a']['c'] ?: false); // Notice: Undefined index: c in php shell code on line 1
var_dump($arr['d'] ?: false);      // Notice: Undefined index: d in php shell code on line 1
var_dump($arr['d']['e'] ?: false); // Notice: Undefined index: d in php shell code on line 1

// Null 合体演算子
var_dump($arr['a'] ?? false);      // array(1) {["b"]=> int(1)}
var_dump($arr['a']['b'] ?? false); // int(1)
var_dump($arr['a']['c'] ?? false); // bool(false)
var_dump($arr['d'] ?? false);      // bool(false)
var_dump($arr['d']['e'] ?? false); // bool(false)

さらに、未定義な変数やプロパティ、falsy な値においても Null 合体演算子はいい感じにチェックできます。

<?php
// エルビス演算子
var_dump($undefined_obj->undefined_property ?: false); // Notice: Undefined variable: undefined_obj in php shell code on line 1
var_dump('' ?: false); // bool(false)
var_dump(0 ?: false);  // bool(false)

// Null 合体演算子
var_dump($undefined_obj->undefined_property ?? false); // bool(false)
var_dump('' ?? false); // string(0) ""
var_dump(0 ?? false);  // int(0)