php排序1億個號碼

來源:互聯網
上載者:User
拆開分成幾千份進行排序再合并。


首先先建立一個1億個QQ號的txt。

PHP code?



<?php

// 建立一億個QQ號的txt (大約需85~100秒)

set_time_limit(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建立完成了。

QQ號碼範圍為>10000。檔案大小大概有840MB。



下面就進行分類劃分成幾千份檔案。

以QQ號碼長度為檔案夾,QQ號碼前3位為檔案名稱。

PHP code?


<?php

// 長度號碼分類 (大約需360~400秒)

set_time_limit(0);

$st = microtime(true);

if(!is_dir('qq_no')) mkdir('qq_no');

$file = fopen('qq.txt', 'r');

$i=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]";

$text_arr[strlen($v)][$tag][] = $v;

}

}

foreach ($text_arr as $k=>$v)

{

$n_dir = 'qq_no/'.$k;

if (!is_dir($n_dir)) mkdir($n_dir);

foreach ($v as $tag=>$val)

{

$n_tf = fopen($n_dir.'/'.$tag.'.txt', 'a+');

fputs($n_tf,implode("\n",$val)."\n");

}

}

unset($text_arr);

++$i;

}

echo microtime(true)-$st;

?>

最後就要每個檔案進行排序合并資料了。

PHP code?



<?php

// 排序完成拉 (800~920秒)

set_time_limit(0);

$st = microtime(true);

$qq_done = fopen('qq_done.txt', 'a+');

$root = 'qq_no';

$dir_array = scandir($root);

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);

echo microtime(true)-$st;

?>

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.