par
niuxe » 22 févr. 2013, 21:41
la solution de niuxe n'a rien d'aléatoire.
+1
Mais malheureusement, je ne comprends pas selon quel critère la fonction en question devrait renvoyer 4, 1 ou 0 nombres.
En admettant que le nombre de résultats est aussi aléatoire :
$table = array(1,3,5,7,9);
function get_random_values(array &$disallowed, &$random_values) {
$random_values = array();
$new_size = mt_rand(0, 11 - count($disallowed));
while (count($random_values) !== $new_size) {
$random = mt_rand(0, 10);
if (!in_array($random, $disallowed, true) && !in_array($random, $random_values, true)) {
$random_values[] = $random;
}
}
}
get_random_values($table, $random_values);
var_dump($random_values);
-10 ! Pourquoi ? Largement moins performant. Sur un petit tableau, ça ne se voit pas. Plus le tableau grossit plus le script va demander des ressources pour rien. Dans mon script j'ai juste oublié de mettre une fonction :
$table = array(1,3,5,7,9);
$tabkeys = array();
for($i = 0;$i <= 10;$i++){ //Le souci est en fait de connaître quelle est la valeur max.
if(!in_array($i,$table)){
$tabkeys[] = $i;
}
}
shuffle($tabkeys);
echo "<pre>";
var_dump($tabkeys);
echo "</pre>";
[quote="Perine"]la solution de niuxe n'a rien d'aléatoire. [/quote]
+1
[quote="Perine"]
Mais malheureusement, je ne comprends pas selon quel critère la fonction en question devrait renvoyer 4, 1 ou 0 nombres.
En admettant que le nombre de résultats est aussi aléatoire :
[php]
$table = array(1,3,5,7,9);
function get_random_values(array &$disallowed, &$random_values) {
$random_values = array();
$new_size = mt_rand(0, 11 - count($disallowed));
while (count($random_values) !== $new_size) {
$random = mt_rand(0, 10);
if (!in_array($random, $disallowed, true) && !in_array($random, $random_values, true)) {
$random_values[] = $random;
}
}
}
get_random_values($table, $random_values);
var_dump($random_values);
[/php][/quote]
-10 ! Pourquoi ? Largement moins performant. Sur un petit tableau, ça ne se voit pas. Plus le tableau grossit plus le script va demander des ressources pour rien. Dans mon script j'ai juste oublié de mettre une fonction :
[php]
$table = array(1,3,5,7,9);
$tabkeys = array();
for($i = 0;$i <= 10;$i++){ //Le souci est en fait de connaître quelle est la valeur max.
if(!in_array($i,$table)){
$tabkeys[] = $i;
}
}
shuffle($tabkeys);
echo "<pre>";
var_dump($tabkeys);
echo "</pre>";
[/php]