首頁 >後端開發 >php教程 >php排序1億個號碼

php排序1億個號碼

巴扎黑
巴扎黑原創
2016-11-22 10:05:381235瀏覽

拆開分成幾千份進行排序再合併。


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

PHP code?



 

limit(0);

$fn = 'qq.txt';

$fp = fopen($fn, 'w');

 

$st = microtime(true); 

$st = microtime(true); ;

shuffle($l);

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

{

    $arr = );

    shuffle($arr);

    fputs($fp,implode("n", $arr)."n");

   microtime( true)-$st;

 

?>

   

 

隨機一分鐘創建了1億分鐘創建了十億個數。

QQ號碼範圍為>10000。文件大小大概有840MB。

下面就進行分類分割成數千份文件。


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



PHP code?







 

// 長度號碼

$st = microtime( true);

 


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

$file = fopen('qq. =0;$end_s = '';

while(!feof($file))

{

    $ = 1042*1024; $s = fread($file, $g);

 

    $end = strrpos($s, "n");

 $end_s = substr($s, $end);

 

    $arr = explode("n", 

  

        if( $v!='')

        {

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

        }

    }

 

           $n_dir = 'qq_no/'.$k;

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

        foreach ($v as $tag=>$val)🎠  _tf = fopen($n_dir.'/'.$tag.'.txt', 'a+ ');

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

   

    unset($text_arr);

 

    ++$i;

}

echo  microtime(true)-$st;

?>

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

PHP code?

   

 

.

set_time_limit(0);

$st = microtime (true);

 

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

 

$at  foreach ($dir_array as $key=>$val)

{

    if ($val != '.' && $val  . $root. '/'.$val);}

 

 

foreach ($dirs as $key=>$val)

    {

        if ($v != '.' && $v != )    $file = $root. '/'。 $鍵。 '/'。 $v;

            $c = file_get_contents($file);

              排序($arr);

             fputs($qq_done, 內爆(「n」 , $arr));

            取消連結($file);

        key);

}

rmdir($root);

 

迴聲microtime(true)-$st;

 

? >

 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn