2

私はファイルが10000の異なる行で構成されています。このファイルからランダムに100行を取り出して、別のファイルに書き込む必要があります。PHPを使用してそれを行う最も簡単な方法は何ですか?

4

2 に答える 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 に答える