我的文件由 10000 条不同的行组成。我需要从这个文件中取出 100 条随机 uniq 行并将它们写入另一个文件。使用php最简单的方法是什么?
问问题
424 次
2 回答
3
一种天真的方式:
$lines = file('somefile.txt');
shuffle($lines);
$random_lines = array_slice($lines, 0, 10);
注意:这完全忽略了系统资源的考虑。
于 2012-11-16T17:05:05.917 回答
3
更快的解决方案更大的生产线
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;
}
具有公认解决方案的简单基准
10,000 行
Array
(
[m1] => 0.013591051101685 <------ M1 Faster
[m2] => 0.033689975738525
)
10万行
Array
(
[m1] => 0.014040946960449 <------ M1 Faster
[m2] => 0.094476938247681
)
于 2012-11-16T17:44:37.177 回答