in_Array()大配列クエリのパフォーマンスの問題
1237 ワード
に質問
最近、プロジェクトインタフェースを実装したとき、配列が大きすぎると、データの戻り速度が少し遅いことがわかりました.インタフェースデータは最長反応時間2 sを返し、繰り返しデバッグした結果、コードセグメントの最も長い部分は
解決プロセス
stackoverflowで私の解決策を提供する文章を見つけました-which is faster,array_key_exists or array_search?
次のように記述されています.
---分割線--
I think it’s faster for PHP to check for keys (
この配列は、ユーザーアカウントを保存するために使用され、メモリに保存されているものを破棄しません.
元の配列
まとめ
大きな配列クエリに直面する場合、PHPではvalueクエリではなくkeyクエリをできるだけ採用する必要があります.
最近、プロジェクトインタフェースを実装したとき、配列が大きすぎると、データの戻り速度が少し遅いことがわかりました.インタフェースデータは最長反応時間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クエリをできるだけ採用する必要があります.