ホームページ  >  記事  >  バックエンド開発  >  配列の最初の1000個の値を取得する問題を解決する方法

配列の最初の1000個の値を取得する問題を解決する方法

WBOY
WBOYオリジナル
2016-06-13 13:37:531980ブラウズ

配列の最初の 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 を超える場合は、最小の配列がポップアップされます。

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