Les Allergies
Alimentaires
Posez votre question Signaler

[php] fonction rand (nombre aléatoire) [Résolu]

clintm 699Messages postés 11 avril 2005Date d'inscription 13 février 2012Dernière intervention - Dernière réponse le 30 oct. 2008 à 23:52
salut,
je voudrais savoir, s'il est possible de confiurer la fonction rand de php, pour quel affiche plus souvent un intervale de nombre, sur tous ceux qu'elle doit afficher,
si rand(1, 25), je voudrais savoir s'il est possible d'afficher plus souvent des nombrs de 18 à 23 par éxemple
sinon, comment pourrais-je faire ?
merci
@+
Lire la suite 

[php] fonction rand (nombre aléatoire) »

13 réponses
Réponse
+7
moins plus
L'equivalent avec la technique idle :

$hasard = rand(1, 55) ;

if ($hasard >3){
$resultat=rand(20,25);

}else{

$resultat=$hasard ;

}

echo $resultat;


C'est quand meme un peu plus simple : ) hé hé hé
Ajouter un commentaire
Réponse
+4
moins plus
Interessant mais pas pour les flemmards , si on dois creer le tableau avec 25 cas + les cas doubles et ceci sans compter le fait que si un jour on veut modifier la marge on devra modifier le tableau de nouveau ... je prefere ma technique :p mais c'est aussi parce que je suis un branleur .
Ajouter un commentaire
Réponse
+3
moins plus
$hasard = rand(1, 55) ;

$hasardindependant=  rand(1, 8) ;

if ($hasardindependant >3){
$resultat=rand(20,25);

}else{

$resultat=$hasard ;

}

echo $resultat;



De cette façon les chiffres ne sont plus eludés : ) hé hé hé hé (je t'avais dit que je reviendrais !)
Ajouter un commentaire
Réponse
+2
moins plus
Bon croy je dis égalité pour cette fois : ) toi pour la longueur et la complexité de ton code , moi pour le double appel au rand , c'est de bonne guerre . on se retrouvera sur un autre post pour se departager gy ha ha haha
Ajouter un commentaire
Réponse
+1
moins plus
MMh c'est juste , tu a gagné pour cette fois ci , mais je reviendrais plus terrible encore mouha mouha ha hah aha !!
Ajouter un commentaire
Réponse
+1
moins plus
Pas mal mais ... 2 ou 3 appels de rand pour chaque tirage : ce n'est pas très efficace (hé, hé, hé, hé)
Ajouter un commentaire
Réponse
+1
moins plus
Réponse à ildeman ton codeest faux car les chiffres entre 4 et 17 ne sont jamais affichés !

Voici une solution possible en reprenant ton code .
<?php
$hasard = rand(1, 40) ; 
 if ($hasard >= 18 AND $hasard <= 25 ) 
 {
    $resultat=$hasard ;
 }
 elseif ($hasard >18)
 {
  $resultat=rand(18,23);
 }
 else
 {
  $resultat=$hasard ;
 }
echo $resultat; 
?>  
Ajouter un commentaire
Réponse
+0
moins plus
je ne connais pas cette fonction tres bien mais je me dis que tu pourrais peut etre faire de la façon suivante :

$hasard = rand(1, 25) ;

if ($hasard >3){
$resultat=rand(18,23);

}else{

$resultat=$hasard ;

}

echo $resultat;




ainsi si le premier rand est superieur a 3 (ce qui est une forte probabilité) un chiffre entre 18 et 23 sera affiché , sinon un chiffre entre 1 et 25 sera affiché , donc il y a de plus grandes proba qu'un chiffre entre 18 et 23 tombe .
Dr Zoidberg- 21 mars 2008 à 08:17
Salut,

Je doute que ca marche ton truc, ou je ne suis pas réveillé (c'est possible aussi) :
Si le premier rand retourne un nb > 3 on en retire un autre entre 18 et 23
Donc on n'aura jamais de retour des nombres 4->17 et 24->25.

Non ?
Ajouter un commentaire
Réponse
+0
moins plus
Prenons le cas suivant : dans l'intervalle 1 à 10, on veut que les nombres de 2 à 5 sortent 2 fois plus souvent.
$t = array( 1,2,3,4,5,6,7,8,9,10,2,3,4,5);    // les nbres de 2 à 5 sont présents 2 fois
$h = rand( 1, sizeof($t) );
$hasard = $t[ $h - 1 ];


Une fonction générique peut être écrite pour générer le tableau $t en fonction des différents paramètres.
Ajouter un commentaire
Réponse
+0
moins plus
Pour répondre à cette objection voici une fonction générique suivie par une série de 10 000 tirages pour valider que ca marche.

function tirageModifie()
	{
	static $t;

	if( !isset( $t ) )
		{	//	génération du tableau t
		// paramètres
		$debut = 1;
		$fin = 55;
		$debutIntervallePlus = 20;
		$finIntervallePlus = 25;
		$multiplicateurIntervallelus = 3;
		//	génération du tableau $t
		for( $i=$debut; $i<=$fin; $i++ )
			$t[] = $i;
		for( $mult=1; $mult < $multiplicateurIntervallelus - 1; $mult++ )
			{
			for( $i=$debutIntervallePlus; $i<=$finIntervallePlus; $i++ )
				$t[] = $i;
			}
		}
	//	tirage
	$h = rand( 1, sizeof($t) );
	return $t[ $h - 1 ];
	}


//	tirages pour valider
for($i=1;$i<55;$i++)
	$s[] = 0;
for($i=1;$i<10000;$i++)
	$s[tirageModifie()-1] ++;
echo '<pre>';print_r($s);
Ajouter un commentaire
Réponse
+0
moins plus
C'est plus simple...mais est-ce-que ca produit la même chose ?

Je ne le pense pas : par exemple les nombres de 3 à 19 et de 26 à 55 ne seront jamais obtenus.


hé, hé, hé, hé
Ajouter un commentaire
Réponse
+0
moins plus
salut,

merci beaucoup,

en fait, dans une partie de mon site (dans un cadre), j'affiche des news, de la pub, je pousse les gens à utiliser firefox;) ...

et je voulais afficher certaine page, plus que d'autre.

alors merci
Ajouter un commentaire
Ce document intitulé « [php] fonction rand (nombre aléatoire) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?