ホームページ >バックエンド開発 >PHPチュートリアル >大量のデータから in_array を判断する効率の問題を解決するための 2 つのカスタマイズされた PHP in_array 関数
ただし、配列が比較的大きい場合は、パフォーマンスが低下し、実行時間が長くなります。そのため、大規模な配列を最適化する場合は、次の 2 つの方法を使用します (どちらもカスタム関数を使用して実装されます)。
1. 配列を反転します。 key と value を入力し、isset を使用してキーが配列に存在するかどうかを判断します
/** * in_array is too slow when array is large */ public static function inArray($item, $array) { $flipArray = array_flip($array); return isset($flipArray[$item]); }
また、なぜ isset を使用せずに array_key_exists を使用して判断しないのかと疑問に思うかもしれません。 array_key_exists() と isset() の比較を見てみましょう:
isset() は配列内の NULL 値に対して TRUE を返しませんが、array_key_exists() は返します。
<?php $search_array = array('first' => null, 'second' => 4); // returns false isset($search_array['first']); // returns true array_key_exists('first', $search_array); ?>
2. implodeで接続し、strposで直接判定します
implode関数+カンマで接続し、strposで直接判定します。 PHP の文字列位置は、特にデータ量が多い場合に非常に高速です。ただし、先頭と末尾に「,」を付けるとより厳密になりますので注意してください。例: ,user1,user2,user3、検索する場合は、,user1, を検索します。最初のものは 0 を返すため、strpos! == false も使用します。例: