in_Array()大配列クエリのパフォーマンスの問題

1237 ワード

に質問
最近、プロジェクトインタフェースを実装したとき、配列が大きすぎると、データの戻り速度が少し遅いことがわかりました.インタフェースデータは最長反応時間2 sを返し、繰り返しデバッグした結果、コードセグメントの最も長い部分はin_array()関数であることが分かった.
解決プロセス
stackoverflowで私の解決策を提供する文章を見つけました-which is faster,array_key_exists or array_search?
次のように記述されています.array_key_exists is much faster. array_search must traverse the whole array, so it is O(n). array_key_exists is a hash table lookup, so it is O(1).
---分割線--
I think it’s faster for PHP to check for keys ( array_key_exists() or simply isset($array[$key])) . To search for a value, PHP must cycle through the array; to search for a key PHP will use a hash function.
この配列は、ユーザーアカウントを保存するために使用され、メモリに保存されているものを破棄しません.
元の配列$array=array('account1','account2','$account3');修正された配列$array=array('account1'=>0,'account2'=>0,'$account3'=>0)isset($array[$account]))を使用して、アカウントが配列内に存在するかどうかを検出します.
まとめin_array()関数が配列を遍歴するため,O(n)はn(配列長)の増大に伴って時間がかかる.したがって、大きな配列に対してin_array()関数を使用する場合、効率の問題を考慮すべきである.
大きな配列クエリに直面する場合、PHPではvalueクエリではなくkeyクエリをできるだけ採用する必要があります.