Fonction array_rand (pas assez aléatoire)

Eléphant du PHP | 101 Messages

24 sept. 2006, 00:10

Bonsoir le peuple PHPien : x

Je me retrouve confronté à un léger soucis.. lorsque je créé une chaine de 40 caractères aléatoire certain résultat semble avoir eu heu.. un meilleur brassage.. :?

par exemple
neOKy6dAh4V7Y5jQWMT1DURkNXBaoxGt9p2Fs0gv
Vv2xiDmGrtsSagU5QP94lKXoBwLZ0WM6n7AzNkq3

alors que certains ressemblent plus à ça...
aAcCDfFgGiIJKlmMnNpqQrRsSTuUvVwXYz024567
aAcCEfFgGhHiIkKlmNpPQRsSuvVwWXYzZ1235678
ce qui n'est pas terrible à mon gout...

Voici ma fonction:
$tab = array("a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G",
"h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O",
"p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W",
"x", "X", "y", "Y", "z", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
$valeurs_aleatoires = array_rand($tab, 40);
$temp = "";
	foreach($valeurs_aleatoires as $j)
	{
	$temp = $temp . $tab[$j];
	}
comment faire pour avoir un bon brassage sur tous les résultats ? : /

Eléphant du PHP | 55 Messages

24 sept. 2006, 04:13

Salut ^^

Bon, perso, j'aurais fait la même chose que toi, ou presque lol
En ce qui me concerne j'ai pris l'habitude d'utiliser la fonction rand(); au lieu d'utiliser la fonction array_rand();. Déjà parce que à ma connaissance, la fonction rand(); propose un peu plus d'option et j'aime bien avoir le choix... Donc, je ne sais pas si ça va t'aider, mais voici comment j'aurais procédé :
$tab = array("a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G", 
"h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O", 
"p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W", 
"x", "X", "y", "Y", "z", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");

//	Compte le nombre total de possibilité
$nombre_total = count($tab);

//	Affecte un nombre aléatoire et affiche
for ($i = 0; $i < count($tab); $i++) {
	$valeurs_aleatoires = rand(0,$nombre_total);
	echo $tab[$valeurs_aleatoires];
}
...et voici quelque réponses que j'ai eu :
• jBl2SD4313vxztmeKDCV5lzK8w3TKfVVAIZ6fUz1mtoYXY50pZgOTrOsHKGS
• bMwKv6hdHQngJ85mbOPS7PSnsAav6oL82cjQQuHBBoLaLyB0iuYyhgKHgaFUm
• nbIOPIjSoKmjMk5Y20xrgCJI08zms5s72OoEXbSCN4PXzITuAF0dPd7o5kbZ5
• U41bP4nYpVMvKiQnMss0d2sfMxKex8em29NL32Elrrb3ZRJGe3BHXTnELXjdWn
• YjElUwEphqxDAOr5lmPEeJmXKLqTMpnVTylK61RNsvObhO8s1oW9yDxdpHx4x
www.rinabk.com • sims.rinabk.com •

Mammouth du PHP | 19672 Messages

24 sept. 2006, 09:53

Autre option : le fonction shuffle() qui va faire sensiblement la même chose. Voici ce que j'ai testé et le résultat obtenu :
<?php
$tab = array("a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G",
"h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O",
"p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W",
"x", "X", "y", "Y", "z", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");

//    Compte le nombre total de possibilité
$nombre_total = count($tab);

/* Test pour sortir 10 chaines successives */
?>
<ul>
<?php
for($j = 0; $j < 10; $j++)
{
    shuffle($tab);
?>
  <li>
<?php
    //    Affecte un nombre aléatoire et affiche
    for ($i = 0; $i < $nombre_total; $i++)
    {
        //$valeurs_aleatoires = rand(0,$nombre_total);
        echo $tab[$i];
    }
?>
  </li>
<?php
}
?>
</ul>
Ce qui m'a donné :
  • 946KW2AvbRNIEoJrLOfsVD1SjpGQ5MyTeC7ZxndtmP3zuBH0Yaglc8UXwFikhq
  • hCQrYDlG6pLuFwsx7oetZT24g183bOMP9AfjdRXNykV5JqzIHSE0vinWcUKmaB
  • BrCpMbOIEocLlm2WUyDtkPeXRqang8wA4Hsd01TxVQvK9J7f3z5jZiGY6NSuFh
  • E073haGp6deWDxYqXKVgH2Bt1nuijN9CSsMPQALyl5kJwFcOzo8v4brRmfTIZU
  • yomkqQifdBC21HeL3KXDxFOhWUAVNRl7aMrzs8pgnGY056t9ETZcjJvwPuS4Ib
  • AFjQsnzbYGmeCuUgEwM62p9XxIPVLfk7tlhTy8qD0ZvHBadW4i5SOrRK3cN1Jo
  • GyJNg4O5jUSDPTIw6MB10dFhRZpKXfrQ9okWnaAVxCqYHcm2tL3z7eElbsi8uv
  • Q2acxfpGtREJZKFNX4PA3BCHWgYoy06lLsIzObkhe81ndTi57M9SDvqjwmUuVr
  • E2LcPGFJOrmjBX5foUz1Rlvw3hqexVTs8uWIdynZkaMNib0Y64g9SH7tCAKpQD
  • snIOMlTz7faW1J0VGvdFw8rK2XQDCjA6YomBhRgEkeZUN9biS5P3Huxqpyc4tL
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ben
Eléphanteau du PHP | 10 Messages

24 sept. 2006, 13:16

Peut-être que la focntion uniqid pourrait t'intéresser...

string uniqid ( [string prefix [, bool more_entropy]] )

Invité
Invité n'ayant pas de compte PHPfrance

25 sept. 2006, 02:25

bon et bien j'ai opté pour la fonction shuffle j'ai pas essayé les autres mais j'aurai obtenu le même résultat je pense.. à savoir: un vrai foutoir

sur mes 500 résultats y'en a pas un pour rattraper l'autre :D
c'est génial merci : x