ホームページ  >  記事  >  バックエンド開発  >  大量のデータから in_array を判断する効率の問題を解決するための 2 つのカスタマイズされた PHP in_array 関数

大量のデータから in_array を判断する効率の問題を解決するための 2 つのカスタマイズされた PHP in_array 関数

高洛峰
高洛峰オリジナル
2016-12-22 13:37:381412ブラウズ

ただし、配列が比較的大きい場合は、パフォーマンスが低下し、実行時間が長くなります。そのため、大規模な配列を最適化する場合は、次の 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(&#39;first&#39; => null, &#39;second&#39; => 4);
// returns false
isset($search_array[&#39;first&#39;]);
// returns true
array_key_exists(&#39;first&#39;, $search_array);
?>

2. implodeで接続し、strposで直接判定します


implode関数+カンマで接続し、strposで直接判定します。 PHP の文字列位置は、特にデータ量が多い場合に非常に高速です。ただし、先頭と末尾に「,」を付けるとより厳密になりますので注意してください。例: ,user1,user2,user3、検索する場合は、,user1, を検索します。最初のものは 0 を返すため、strpos! == false も使用します。例:


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。