4

long(ish) 変数があり$row['data']['manybullets']['bullets']['bullet'][0]、三項演算子を使用して設定されているかどうかをテストしたいとします。

$bulletx = 
    isset($row['data']['property']['bullets']['bullet'][0])    // condition
    ? $row['data']['property']['bullets']['bullet'][0]         // true
    : 'empty';                                                 // false

とにかく、表現の主題を繰り返すのではなく、表現の主題を参照することはできますか. 例えば

$bulletx = 
    isset($row['data']['property']['bullets']['bullet'][0])    // condition
    ? SUBJECT                                                  // true
    : 'empty';                                                 // false    

奇妙。

4

4 に答える 4

2

次のように実行できます。

$bulletx = ($r=$row['data']['property']['bullets']['bullet'][0]) ? $r : 'empty';

実際のデモを見る

于 2013-11-14T12:59:39.403 に答える
1

E_NOTICE 警告をトリガーしなければ、そうではありませんが、それらを無視することにした場合は、このように達成できます。

$bulletx = 
    $row['data']['property']['bullets']['bullet'][0]    // true
    ?: 'empty';                                          // false    
于 2013-11-14T12:52:57.490 に答える
1

組み込みの方法はありませんが、配列キーをチェックする isset のラッパーを作成できます。

function array_isset(&$array /* ... */) {
    $a = $array;
    if (! is_array($a)) {
        return false;
    }
    for ($i = 1; $i < func_num_args(); $i++) {
        $k = func_get_arg($i);
        if (isset($a[$k])) {
            $a = $a[$k];
        } else {
            return false;
        }
    }

    return $a;
}

$bulletx = array_isset($row, 'data', 'property', 'bullets', 'bullet', 0) ?: 'empty';

isset() と同じ API を保持し、?: ショートカットを利用できるため、この方法が気に入っています。

于 2013-11-14T13:09:36.417 に答える