PHPでUndefinedIndex対策


PHPで、多階層の配列を使う時、UndefindIndexに悩まされることはありませんでしょうか?
そんな時使える関数を発明しました!(といっても、めちゃくちゃ簡単なコードですが)

if (!function_exists('IFERROR')){
    function IFERROR($ary,$idx,$val='-'){
        if (is_string($idx) || is_numeric($idx) {
            return (isset($ary[$idx])) ? $ary[$idx] : $val;
        }else{
            foreach($idx as $i){
                if (!isset($ary[$i])){
                    return $val;
                }else{
                    $ary = $ary[$i];
                }
            }
            return $ary;
        }
    }
}

使い方

$ary = ['abc'=>['x'=>'test','def'=>'test2']]; //こんな配列があったとして

// 階層順のindexを配列で $ary['abc']['def'] のような場合
$idx = ['abc','def'];
IFERROR($ary,$idx,'-');  // indexがある場合、値を、ない場合"-"を返す

IFERROR($ary,['abc','efg'],0);  // => 0
IFERROR($ary,['abc','def'],0);  // => "test2"