Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 00h30   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations personnelles :
Âge : 54
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 68
Points : 68
Par défaut Trouvez-vous que shuffle() mélange bien la liste qu'on lui donne ?

Bonjour,

Depuis que array_rand() ne mélange plus les clés des tableaux (php-5.2) : j'utilise une combinaison array_rand() + shuffle() qui, hélas, mélange mal les éléments et qui équivaut quasiment à couper et recouper basiquement un jeu de carte. Ce qui fait qu'on observe, après rechargement de la page, quelques changements dans l'ordre mais aussi beaucoup trop de similitudes… pas de quoi casser trois pattes à un canard.
Connaissez vous une meilleure alternative ou une façon d'utiliser ces deux fonctions pour obtenir un " vrai hasard " ?

Voire : pouvez vous m'aiguiller vers une fonction que j'ignore et qui ferait mon affaire ?

<edit>
Note à celui qui a modifié mon post, quand je m'explique littéralement : ce n'est pas du code - l'utilisation de la balise "code" nuit complètement au bon entendement de ce que veux dire. (J'ai rétabli et merci de laisser ainsi)
</edit>
Auréance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 07h24   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
J'ai fais des tests sur 20 000 000 tirages sur un tableau de 5 éléments :

Nombre de sorties de chaque élément par array_rand :
Code :
Array ( [1] => 4030027 [2] => 3997068 [0] => 3991579 [4] => 4030029 [3] => 3951297 )
Moyenne de différences par rapport au tirage de départ avec array_shuffle
3.99711275
Moyenne de differences par rapport au tirage précédent avec array_shuffle
3.99853085
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 22h43   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations personnelles :
Âge : 54
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 68
Points : 68
Merci sabotage de ta réponse.
As-tu combiné les deux comme ci-bas ? ou bien as-tu fais autrement ?
PS ; je n'ai pas trouvé la fonction array_shuffle dans le manuel PHP, j'utilise donc shuffle tout simple.

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Affichage aléatoire des fiches membres
 
$membres = array
(
'membres/ficheux_photographe/index.php',
'membres/sainte_catherine/index.php',
'membres/la-fee-melusine/index.php',
'membres/menuiserie-lmv/index.php',
'membres/auto-ecole-sylvestre/index.php',
'membres/garage-du-centre/index.php',
'membres/express-depannage/index.php',
'membres/cabinet-person/index.php',
'membres/pizz-a-emporter/index.php',
'membres/maison-de-la-presse/index.php',
'membres/boulangerie-marczak/index.php',
'membres/vetements-manceau/index.php',
'membres/imoconseil/index.php',
'membres/optique-lusignan/index.php',
'membres/garage-promenades/index.php',
'membres/galerie-fee-melusine/index.php'
);
 
shuffle($membres);
$choix   = array_rand($membres, 16);
include($membres[$choix[0]]);
include($membres[$choix[1]]);
include($membres[$choix[2]]);
include($membres[$choix[3]]);
include($membres[$choix[4]]);
include($membres[$choix[5]]);
include($membres[$choix[6]]);
include($membres[$choix[7]]);
include($membres[$choix[8]]);
include($membres[$choix[9]]);
include($membres[$choix[10]]);
include($membres[$choix[11]]);
include($membres[$choix[12]]);
include($membres[$choix[13]]);
include($membres[$choix[14]]);
include($membres[$choix[15]]);
Rappel : array_rand ne mélange plus les éléments du tableau depuis PHP 5.2.10
Auréance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 23h37   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Oui pardon il s'agit bien de shuffle.

Mon test montre que aussi bien shuffle que array_rand fournisse le service attendu.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 02h04   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations personnelles :
Âge : 54
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 68
Points : 68
@sabotage Merci, j'ai confiance en ton test.
Je trouvais simplement qu'il y avait trop de similitudes de positionnement entre un tirage et le suivant. J'avais sans doute pas assez de "fiches membres" (le principe est de ne pas faire de jaloux et d'afficher l'ordre des membres de l'association de manière aléatoire)
On dirait que j'ai la berlue… Car ça me semble fonctionner de nouveau. J'utilise actuellement : Apache/2.0.63 (Unix) PHP/5.2.11 et je trouve tout de même que ça ne se "mélange pas trop au top". Heureusement que je ne me serve pas de cette fonction pour choisir mes numéros gagnants au Loto

Montre-moi ton test sur 20 bananes de tirages (s'il te plait) - Ça m'interresse.

<edit>
Je veux dire le code qui produit le résultat du test
</edit>
Auréance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h10.


 
 
 
 
Partenaires

Hébergement Web