2017-01-11 9 views
0

ビット長いタイトル:

public function containsKey($key) 
{ 
    return isset($this->elements[$key]) || array_key_exists($key, $this->elements); 
} 

リファレンスhere:P

とにかく、ArrayCollectionクラスでは、DoctrineはCollectionが与えられたキーが含まれているかどうかを確認するために、この構文を使用しています。

なぜissetarray_key_existsの両方を使用するのですか?このユースケースでは同じものではありませんか?

答えて

0

答えは、いいえ、それらは同じではありません。 docsから:

isset()array_key_exists()を行いながら、 NULL値に対応する配列のキーのためTRUEを返しません。

+0

しかし、 'array_key_exists()'だけを使ってみてはどうでしょうか?なぜ 'isset()'も追加するのですか? – Aerendir

+0

私は1つの理由しか考えることができませんでした。 'isset()'は大規模な配列入力では 'array_key_exists()'よりもはるかに高速であり、したがってそれらの順序です。 – revo

+1

はい、それは合理的です...ありがとう!私は別のトリックを学んだ! :D – Aerendir

0

array_key_exists()それが非NULL値を有する場合、それは明らかであるので、確認項目が配列に存在

isset()は、また、存在確認として作用する(確認エントリがnullでない行うことができます配列)

最初にキーの存在を探す関数でisset()が使用された理由は、大きな配列では高速です。この関数は基本的に、キーが存在する場合はnull以外の値を持ち、見つからない場合は、遅い配列を使用して2回チェックします。

関連する問題