从文件中获取uniq随机行,并使用php将它们写入另一个文件

从文件中获取uniq随机行,并使用php将它们写入另一个文件,php,random,lines,Php,Random,Lines,我的文件由10000行不同的行组成。我需要从这个文件中随机抽取100行uniq,然后将它们写入另一个文件。使用php最简单的方法是什么?一种简单的方法: 注意:这完全忽略了系统资源方面的考虑。更快的解决方案更大的线路 function m1($file) { $fp = fopen($file, "r"); $size = filesize($file); $list = array(); $n = 0; while ( true ) {

我的文件由10000行不同的行组成。我需要从这个文件中随机抽取100行uniq,然后将它们写入另一个文件。使用php最简单的方法是什么?

一种简单的方法:


注意:这完全忽略了系统资源方面的考虑。

更快的解决方案更大的线路

function m1($file) {
    $fp = fopen($file, "r");
    $size = filesize($file);
    $list = array();
    $n = 0;
    while ( true ) {
        fseek($fp, mt_rand(0, $size));
        fgets($fp);
        $pos = ftell($fp);
        isset($list[$pos]) or $s = trim(fgets($fp)) and $list[$pos] = $s and $n ++;
        if ($n >= 100)
            break;
    }
    return $list;
}



function m2($file) {
    $lines = file($file);
    shuffle($lines);
    $list = array_slice($lines, 0, 100);
    return $list;
}
具有公认解决方案的简单基准测试

10000行

Array
(
    [m1] => 0.013591051101685 <------ M1 Faster
    [m2] => 0.033689975738525
)
数组
(
[m1]=>0.01359105101685 0.033689975738525
)
100000行

Array
(
    [m1] => 0.014040946960449 <------ M1 Faster
    [m2] => 0.094476938247681
)
数组
(
[m1]=>0.014040946960449 0.094476938247681
)


谢谢。。。只是因为你说了一种天真的方式:,以防其他人想要更大文件的替代方案。“你的解决办法是让他们走得更远。@Jason McCreary不是真的。。有多少人处理1000000行文件。。。。对于大多数人来说,您的解决方案是正确的+我喜欢
这完全忽略了系统资源方面的考虑。
部分…我知道。孩子们,不要在家里这样做!
Array
(
    [m1] => 0.014040946960449 <------ M1 Faster
    [m2] => 0.094476938247681
)