ラボ > PHP:配列関連、Javascript関連

php、js 配列で値が無ければ別の値を返したい(?? 演算子(Null合体演算子))

配列の任意のキーにアクセスするときのエラーを防ぎたい

作成日:2024-02-29, 更新日:2024-02-29

?? 演算子(Null合体演算子)

$ary = arrary(
  'xxy' => 1,
  'xyy' => null,
);
$init_val = '空';
echo $ary['xxx'] ?? $init_val; // 「空」が出力
echo $ary['xxy'] ?? $init_val; // 「1」が出力
echo $ary['xyy'] ?? $init_val; // 「空」が出力

「$a = $entry_data['cbe_id'] ?? ''」みたいな感じでPHPとjavascriptの違い

▼PHP

echo $entry_data['cbe_id'] ?? '';

▼javascript

console.log(entry_data['cbe_id'] ?? '');

javascriptも似たような感じだけど微妙に異なる

PHP Javascript
$entry_data自体が存在しない 右辺の値 エラー
$entry_data = null 通常はエラー。PHP 7.0以降では、右辺の値 エラー
$entry_dataが配列ではなく、文字列の場合 エラー 右辺の値
$entry_data['cbe_id'] = null 右辺の値 右辺の値

問題点

  • PHP7.0以降で使える
  • $aryが文字列など型が違うならエラー

PHP: 独自関数

返したい値は下記のような感じ

  • 対象が配列じゃない → $init_val
  • キーが存在しない → $init_val
  • 値がnull → 条件次第で → $init_val
function getAry( $ary, $key, $init_val='', $prms=array() ) {
  if ( !is_array($ary) ) {
    return $init_val;
  }
  if ( !array_key_exists($key, $ary) ) {
    return $init_val;
  }

  $val = $ary[$key];
  if ( $val == null ) {
    if ( array_key_exists('change_null', $prms) && $prms['change_null'] ) {
      $val = $init_val;
    }
  }
  return $val;
}
$ary = arrary(
  'xxy' => 1,
  'xyy' => 2,
);
$init_val = '空';
echo getAry( $ary, 'xxx', $init_val);