真ん中の方法が見つからなかったので、この質問に2セントを足したいと思いました。
すでに述べたisset()
ように、キーの値を評価するのでfalse
、その値がnull
どこにあるかを返すのはarray_key_exists()
、キーが配列に存在するかどうかをチェックするだけです。
PHP 7を使用して簡単なベンチマークを実行しましたが、結果は反復を完了するのにかかった時間です。
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
このベンチマークを使用して、このカスタム関数の結果を追加し、完成させました。
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
すでに見たとおり、isset()
最も速い方法ですが、値がfalseの場合はfalseを返すことがありますnull
。これは望ましくない結果をもたらす可能性があり、そのarray_key_exists()
場合は通常使用する必要があります。
しかし、中道があり、それはを使用していisset() || array_key_exists()
ます。このコードは通常、より高速な関数を使用してisset()
おり、 isset()
falseを返した場合にのみarray_key_exists()
検証に使用します。上記の表に示されているように、を呼び出すのと同じくらい高速isset()
です。
はい、それを書くことは少し多く、関数でそれをラップすることは遅いですがずっと簡単です。パフォーマンスのためにこれが必要な場合は、ビッグデータのチェックなどを行って完全に書き出します。それ以外の場合は、1回の使用で機能のarray_key_isset()
ごくわずかなオーバーヘッドは無視できます。