Exclusion d'un nombre aléatoire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Exclusion d'un nombre aléatoire

Re: Exclusion d'un nombre aléatoire

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

Re: Exclusion d'un nombre aléatoire

par Perine » 22 févr. 2013, 00:20

la solution de niuxe n'a rien d'aléatoire. 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);

Re: Exclusion d'un nombre aléatoire

par niuxe » 21 févr. 2013, 01:13

Salut,
<?php
	$table = array(1,3,5,7,9);
	$tabkeys = array();
	
	for($i = 0;$i <= 10;$i++){
		if(!in_array($i,$table)){
			$tabkeys[] = $i;
		}
	}
	var_dump($tabkeys);

Exclusion d'un nombre aléatoire

par mctarek » 20 févr. 2013, 22:03

Bonjour.
Je me trouve devant une situation qui a l'air simple, mais dont je ne parviens pas
à trouver le bon code pour un résultat fiable.

Voici mon besoin. Je souhaite générer un nombre aléatoire mais qui ne fait pas parti d'un tableau
$table = array(1,3,5,7,9);
function gen_nb() {	
return mt_rand(0,10);
}

$tabkeys = array(); // tableau des nombres à trouver

while (!in_array($nb = gen_nb(),$table)) {
	array_push($tabkeys,$nb);
	}
	
	var_dump($tabkeys);
	
	// retourne par exemple array(4) { [0]=> int(8) [1]=> int(2) [2]=> int(6) [3]=> int(10) } 
	// soit array(1) { [0]=> int(0) } 
	// soit array(0) { } 
Comment faire pour un obtenir à coup sûr une liste de résultats fiable ?
Merci de votre aide.
mctarek