ホームページ >バックエンド開発 >PHPチュートリアル >配列の最初の1000個の値を取得する問題を解決する方法
配列の最初の 1000 個の値を取得します
$fn = '/var/log/haproxy.log.2';
$fp = fopen($fn, 'r ') または die("file open $fn false");
while($s = fgets($fp)) {
preg_match('/[[d.:]+].+[( [d .:]+)]/', $s, $r);
if(empty($r[1])) continue;
@$res[$r[1]]++;
}
fclose($fp);
asort($res);
print_r($res);
?>
-----解決策---------
あなたのニーズはこの方法では解決できません
ので、個別に対処する必要があります。 。 。 。 。
たとえば、IP を最初に入力して 255 個のファイルに書き込むこともできます。これにより、
255 で使用するメモリを減らすことができます。それぞれ 各ファイル内の上位 1000 の名前を検索します。 。 。各グループには最大 2^24 の異なる数値が含まれるため (当面は ipv6 は考慮しない)、このメモリは許容可能です
配列トラバーサルを使用すると、複雑さは O(n) で、最初の 1000
最後に 1000 の順序付けられた配列を維持し、1000 を超える場合は、最小の配列がポップアップされます。