2009-05-07 40 views
14

エラーが発生しないように、キーが配列内にあるかどうかを素早く特定したいと思います。ディープアレイ値が存在するかどうかを確認する方法

は例えば、私は全くの$ ARR [ 'F'] [ 'B']のいずれかの変数を持っていない可能性があります。この

$arr['f']['b']['g'] = array('a', 'b', 'c',) ; 

や配列のような配列を持っているかもしれません:

$arr['f']['x'] = array() ; 

$ arr ['f'] ['b'] ['g']の(おそらく)内容を参照する際にテストで繰り返しを避けるにはどうすればよいですか?

if (isset($arr['f']) && 
    isset($arr['f']['b']) && 
    isset($arr['f']['b']['g']) /* ... yawn */) { 
    /* blah */ 
} 

私が参照している特定の配列値が存在するかどうかを識別するために、より簡潔な方法が必要ですか?私が求めている価値と、そのすべての祖先の両方の存在をテストしなければならないのはあまりにも冗長すぎるようです。いくつかの状況では意味がありますが、すべてではありません。例によって

:それは私がすぐにカートはどうかユーザーのチェックそれぞれを含めることなく、エントリを持っているかどうかを確認する方法をしたい、と言う、USER->セッション - >カートを表すことができます存在し、その後、セッションが存在するかどうか、そしてカートが存在するかどうか、そして...

編集:私は、「『G』のキー名を持つ配列の値が存在しない」を探していませんよ、 「f => b => gの祖先を持つ配列値が存在する」という意味です。

答えて

25

以下は、あなたが期待通りに動作します。これらの要素のいずれかが定義されていない場合は

if(isset($a['a']['b']['c'])) 

は、isset()はfalseを返します。

+0

ハァッ!うまく見つけました:) –

+3

明確にするために、これは '$ a'の存在を安全にテストします:' $ a'がセットされていなければfalseを返します。 –

+0

うわー、これはうまくいきません。笑。 – baldrs

0

array_searchのコメントには、多次元検索のコードがあります。それは助けるかもしれない。

+0

返信いただきありがとうございます。 そのページには十数個のコードブロック例があります(それ以上はカウントしませんでした)が、どれが効率的な解決法を提供するのかわかりません(敏感さの観点か、パフォーマンス)。 私が何をしているのかを明確にするために質問が更新されます。再度、感謝します! –

関連する問題