多次元配列でキーが存在しているかのチェックを頭から行うのが長いなと思って調べてたら、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)