Voici les résultats obtenus avec le serveur de mon travail, donc on peut supposé que les résultats son sans doute un peu faussé car on doit être 2 ou 3 sur le serveur. Mais la différence est tellement notable qu'il n'y a pas de doute:
Voilà se que j'ai obtenue comme résultat pour 1 000 000 de test par méthode:
Voici le code des methodes tester:
Voilà se que j'ai obtenue comme résultat pour 1 000 000 de test par méthode:
Citation :Methode 1: Temps moyen : 0.002 463 416 217 09 secondes (Temps Exec. 2463.41621709secondes)
Methode 2: Temps moyen : 0.000 034 199 709 653 9 secondes Temps Exec. 34.1997096539secondes)
Methode 3: Temps moyen : 0.000 029 232 471 94 29 secondes (Temps Exec. 29.2324719429secondes)
Methode 4: Temps moyen : 0.000 172 626 668 93 secondes(Temps Exec. 172.62666893secondes)
Voici le code des methodes tester:
Code PHP :
<?php
function methode1()
{
$time = microtime(true);
$dispo= range(1, 30);
$i=0;
while($i<20)
{
$rand = mt_rand(1, count($dispo)); //on tire entre 1 et la taille de notre tableau.
$a = $rand;
while($a<=count($dispo))
{
if($a == count($dispo)) unset($dispo[$a]); //on détruit le dernier élément du tableau pour avoir le bon nombre d'élément au prochain tour de boucle
else $dispo[$a] = $dispo[$a+1]; //on décale notre tableau vers la gauche
$a++;
}
$i++;
}
$time2 = microtime(true);
$time = $time2 - $time;
return $time;
}
function methode2()
{
$time = microtime(true);
$dispo= range(1, 30); // tableau de toutes les valeurs possibles
shuffle($dispo); // hop, c'est tout mélangé
$tab = array_chunk($dispo,20); // je garde que les 20 premiers, c'est mes 20 tirages sans remise
$time2 = microtime(true);
$time = $time2 - $time;
return $time;
}
function methode3()
{
$time = microtime(true);
$NbDispo = range(1, 30);
$NbTires = array_rand($NbDispo, 20);
$time2 = microtime(true);
$time = $time2 - $time;
return $time;
}
function methode4()
{
$time = microtime(true);
$i=0;
$dispo = array_fill(1, 30, 0);
while($i<20)
{
$rand = mt_rand(1,30);
//si il y a rien dans la case <=> dispo
if($dispo[$rand] == 0)
{
$dispo[$rand] = 1; //on le rend indisponible
$i++;
}
}
$time2 = microtime(true);
$time = $time2 - $time;
return $time;
}
$methode=1; $nb_boucle = 1000000;
while($methode<5)
{
$i=1; $resultat=0; $func = 'methode'.$methode;
while($i<=$nb_boucle)
{
$resultat += $func();
$i++;
}
echo 'Methode '.$methode.': Temps moyen : '.($resultat/$nb_boucle).' secondes (Temps Exec. '.$resultat.'secondes)<br><br>';
$methode++;
}
On peut donc dire que tu avais raison IGstaff, c'est bien l'array_rand() qui semble le plus approprié ici.
Merci a tous.