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 ?
Réponses
Trop de publicités?
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
)