Rechercher : dans
Par :

[php] fonction rand (nombre aléatoire)

Dernière réponse le 30 oct 2008 à 23:52:40 clintm, le 20 mar 2008 à 20:37:59 
 Signaler ce message aux modérateurs

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
@+

------------------------------------------
>>Trop de paroles noient la vérité<<

Meilleures réponses pour « [php] fonction rand (nombre aléatoire) » dans :
Générer des nombres aléatoires efficacement avec rand() Voir Générer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
Supprimer les accents avec PHP VoirPour un tas de raisons, il est parfois utile de convertir un texte accentué en un texte sans accents. Voici une fonction permettant de transformer très simplement la quasi-totalité des accents en leur équivalent non-accentués : function...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Introduction à PHP VoirQu'est-ce que PHP? PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La...

1

IdleMan, le 20 mar 2008 à 21:37:25

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 .

Répondre à IdleMan

5

Dr Zoidberg, le 21 mar 2008 à 08:17:28

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 ?

Répondre à Dr Zoidberg

2

croy, le 20 mar 2008 à 22:08:11

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.

Répondre à croy

3

IdleMan, le 20 mar 2008 à 23:24:13
  • +1

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 .

Répondre à IdleMan

4

croy, le 21 mar 2008 à 07:49:25
  • +1

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

Répondre à croy

6

IdleMan, le 21 mar 2008 à 09:38:14
  • +1

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é

Répondre à IdleMan

7

croy, le 21 mar 2008 à 12:13:45

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é

Répondre à croy

8

IdleMan, le 21 mar 2008 à 13:32:32

MMh c'est juste , tu a gagné pour cette fois ci , mais je reviendrais plus terrible encore mouha mouha ha hah aha !!

Répondre à IdleMan

9

IdleMan, le 21 mar 2008 à 13:34:36
  • +1

$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 !)

Répondre à IdleMan

10

croy, le 21 mar 2008 à 13:43:52
  • +1

Pas mal mais ... 2 ou 3 appels de rand pour chaque tirage : ce n'est pas très efficace (hé, hé, hé, hé)

Répondre à croy

11

clintm, le 21 mar 2008 à 14:56:03

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

------------------------------------------
>>Trop de paroles noient la vérité<<

Répondre à clintm

12

IdleMan, le 21 mar 2008 à 15:23:49

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

Répondre à IdleMan

13

 Grégory Marcassin, le 30 oct 2008 à 23:52:40
  • +1

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

Répondre à Grégory Marcassin