2 votes

Obtenez uniq lignes aléatoires d'un fichier et écrivez-les dans un autre fichier en utilisant php

J'ai un fichier composé de 10000 lignes différentes. J'ai besoin de prendre 100 lignes uniq aléatoires de ce fichier et de les écrire dans un autre fichier. Quel est le moyen le plus simple de le faire en utilisant php ?

3voto

Jason McCreary Points 35919

A naïf manière :

$lines = file('somefile.txt');
shuffle($lines);
$random_lines = array_slice($lines, 0, 10);

Note : Cela ne tient absolument pas compte des considérations relatives aux ressources du système.

3voto

Baba Points 49157

Une solution plus rapide pour les grandes lignes

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;
}

Benchmark simple avec solution acceptée

10 000 lignes

Array
(
    [m1] => 0.013591051101685 <------ M1 Faster
    [m2] => 0.033689975738525
)

Ligne 100 000

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

Code de référence complet

Fichier utilisé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X