最速ではなく、最も読みやすい方法が必要です。これはin_array()
(JavaScript: array.indexOf(value) >= 0
) 2 つまたは 3 つを超える値の場合です。
パフォーマンスの違いはごくわずかです。関数呼び出しと配列の作成には確かにいくらかのオーバーヘッドがありますが、ファイル アクセス、データベース アクセス、ネットワーク アクセスなどの高価な操作と比較すると問題ではありません。したがって、最終的に誰も違いに気付かないでしょう。 .
以下は短いベンチマークで、それぞれ 100 万回の反復があります。
5.4829950332642 - in_array, the array is recreated everytime
2.9785749912262 - in_array, the array is created only once
0.64996600151062 - isset(), the array way created only once and then the values were turned to keys using array_flip()
2.0508298873901 - ||
したがって、最速でありながら非常に読みやすい方法はこれです。一度だけ作成して何$arr
度も使用しない限り、これは必要なく、そのまま使用できます。in_array()
$arr = array_flip(array('your', 'list', 'of', 'values'));
if(isset($arr[$value])) ...
JavaScript を要求した場合 (この場合、これらの接頭辞を削除してください! )、最善の解決策は次を使用することです。$
Array.indexOf()
['a', 'b', 'c'].indexOf(value) >= 0
ただし、すべてのブラウザーが既に をサポートしているわけではないArray.indexOf()
ため、たとえばUnderscore.jsの関数を使用することをお勧めします。
_.contains(['a', 'b', 'c'], value)
jQuery には、このための関数もあります。
$.inArray(value, ['a', 'b', 'c'])
最も速い方法はオブジェクトとin
演算子を使用することですが、オブジェクト定義は配列定義よりも読みにくくなります。
value in {'a':0, 'b':0, 'c':0}
さまざまなソリューションの JSPerf ベンチマークは次のとおりです。ループ。