私はファイルが10000の異なる行で構成されています。このファイルからランダムに100行を取り出して、別のファイルに書き込む必要があります。PHPを使用してそれを行う最も簡単な方法は何ですか?
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
)
100,000ライン
Array
(
[m1] => 0.014040946960449 <------ M1 Faster
[m2] => 0.094476938247681
)
于 2012-11-16T17:44:37.177 に答える