|
|
|
|
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é<<
Je ne connais pas cette fonction tres bien mais je me dis que tu pourrais peut etre faire de la façon suivante :
|
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. |
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éponse à ildeman ton codeest faux car les chiffres entre 4 et 17 ne sont jamais affichés !
<?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;
?>
|