何千ものパーツに分解し、並べ替えて再度結合します。
まず、1億のQQ番号を含むtxtを作成します。
PHP code?
//1億個のQQ番号のtxtを作成(約85~100秒)
set_time_制限 (0)
$fn = 'qq.txt';
$fp = fopen($fn, 'w');
$st = microtime(true);
$l = range(0,10000 );
shuffle($l);
foreach ($l as $k=>$v)
{
$arr = range($v*10000+10000,10000*($v+1) +9999 );
shuffle($arr);
fputs($fp,implode("n", $arr)."n");
unset($arr);
}
echo microtime( true)-$st;
?>
1 億個のランダム QQ が作成されるまで 1 ~ 2 分待ちます。
QQ 番号の範囲は >10000 です。ファイルサイズは約840MBです。
以下は数千の文書に分類されます。
QQ番号の長さがフォルダーとして使用され、QQ番号の最初の3桁がファイル名として使用されます。
PHPコード?
//長さ番号分類(約360~400秒)
set_time_limit(0);
$st = マイクロタイム ( true);
if(!is_dir('qq_no')) mkdir('qq_no');
$file = fopen('qq.txt', 'r'); =0;
$end_s = '';
while(!feof($file))
{
$g = 1042*1024;
fseek($file,$g*$i);
$s = fread($file, $g);
$end = strrpos($s, "n");
$arr_s = $end_s.substr($s, 0, $end); $end_s = substr($s, $end);
$arr =explode("n", $arr_s);
foreach ($arr as $k=>$v)
{
if ($ v! = '') {
$ tag = "$ v [0] $ v [1] $ v [2]"; $v;
}
}
foreach ($text_arr as $k=>$v)
{
$n_dir = 'qq_no /'.$k;
if (! is_dir($ n_dir)) mkdir($n_dir); txt ', 'a+');
+ +$i;
}
echo microtime(true)-$st;
?>
最後に、ファイルを並べ替えてマージする必要があります。
PHP code?
// ソート完了(800~920秒)
set_time (0);
$st = microtime(true);
$qq_done = fopen('qq_done.txt', 'a+');
$root = 'qq_no';
foreach ($dir_array as $key=>$val)
{
if ($val != '.' && $val != '..')
$dirs[$val] = scandir($ root.'/'.$val);
}
foreach ($dirs as $key=>$val)
{
foreach ($val as $v)
{
if ($v != '.' && $v != '..')
{
$file = $root. '/' 。 $key 。 「/」。 $v;
$c = file_get_contents($file);
$arr = explode("n", $c);
sort($arr);
fputs($qq_done, implode("n", $arr));
unlink($file);
}
}
rmdir($root. '/' . $key);
}
rmdir($root);
エコーmicrotime(true)-$st;
?>