php排序1亿个号码

巴扎黑
发布: 2016-11-22 10:05:38
原创
1444人浏览过

拆开分成几千份进行排序再合并。


首先先创建一个1亿个qq号的txt。

PHP code?

 

// 创建一亿个QQ号的txt (大约需85~100秒)

立即学习PHP免费学习笔记(深入)”;

 

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?

 

// 长度号码分类 (大约需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?

   

 

// 排序完成拉 (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;

 

?>

   

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号