Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 07/12/2010, 14h26   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Tirage au sort aléatoire particulier

Bonjour,
je me permets de vous demander de l'aide pour faire ceci :

Dans ma table MySQL, j'ai un champs contenant des id d'user séparés par des virgules : 1,2,3,4

J'aimerai créer un tirage aléatoire afin d'avoir ceci :
1 => 2
2 => 4
3 => 1
4 => 3

La colonne en rouge étant générée aléatoirement, mais 1 => 1, 2=>2, etc. n'est pas possible.

Après quelques recherches sur Internet, j'arrive à générer ma liste de gauche, j'arrive à générer la liste rouge aléatoirement avec shuffle, mais je bloque sur le faire de dire que 1 ne doit pas correspondre à 1, 2 à 2 etc.

Par avance, merci pour votre aide,
M.
marinms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h47   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Là comme ça, je ne pourrais t'aider sans ton code et ma réponse sera donc toute "bête"...

Test si ta clé (colonne de gauche) est égal à ta valeur (colonne rouge)

Code :
1
2
3
if($cle === $$value){
 //on regénère
}
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h51   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Pardon, voici mon code de test, qui pour l'instant affiche :
1
2
3
4
5
3
4
2
1
5


Voici le code de test :
Code :
1
2
3
4
5
6
7
8
9
<?php
$test = array("1","2","3","4","5");
$test2 = array("1","2","3","4","5");
shuffle($test2);
$res = array_merge($test,$test2);
foreach($res as $res) {
	echo $res."<br /> ";
}
?>
marinms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h53   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Les index et les valeurs ont-ils un lien ?

Ex. si tu as 1, 4, 5, 8, peux-tu obtenir :

Code :
1
2
3
4
1 => 4
2 => 1
3 => 8
4 => 5
Ou bien :

Code :
1
2
3
4
1 => 5
4 => 4
5 => 8
8 => 1
??
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h58   #5
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

un truc dans ce genre là ?

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
$numbers = $num2 = range(1, 4);
 
do {
 
shuffle($num2);
 
if (  sizeof(array_intersect_assoc($numbers,$num2)) == 0 ) {
	$res = array_merge($numbers,$num2);
	foreach($res as $re) {
		echo $re."<br /> ";
	}
}
 
 
} while ( sizeof(array_intersect_assoc($numbers,$num2)) != 0);
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 15h04   #6
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
J'essaye de te faire ça, je reposte d'ici quelques minutes

edit: grillé, j'attends de savoir si son code te va

edit2: Tant qu'à faire, ça fonctionne alors autant poster, t'auras l'embarras du choix?

Code :
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
 
<?php
 
  function pre($array){
    echo '<pre>';
      print_r($array);
    echo '</pre>';
  }
  $colonne_gauche = array("1","2","3","4","5");
  $colonne_droite = array();//futur tableau avec le tirage
  $assigne = array();//les nombres déjà assignés
  $i = 0;//début de ton tableau gauche
  do{
    $nb = rand(1, count($colonne_gauche));
    if(!in_array($nb, $assigne)){
      if($nb != $colonne_gauche[$i]){
        $colonne_droite[] = $nb;
        $assigne[] = $nb;
        $i++;
      }
    }
  }while(count($colonne_droite) != count($colonne_gauche));
 
  //tests (f5 pour plusieurs test ^^)
  echo 'colonne_gauche:';
  pre($colonne_gauche);
  echo '<br />';
  echo 'colonne_droite:';
  pre($colonne_droite);
  echo '<br />';
  echo 'assigne:';
  pre($assigne);
  echo '<br />';
 
?>
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 17h30   #7
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Merci pour votre aide,
@Séb. c'est en effet la 2ème solutions que je recherche.
@syl2095 @radicaldreamer : en fait c'est carrément un mix des 2 codes, le premier affiche une ligne, suivie d'une autre de façon aléatoire ou 1 != 1, 2 !=2, etc., le code de radicaldreamer affiche bien 2 colonnes, la 2ème étant aléatoire. En revanche, après quelques tests, j'ai parfois 1 = 1.
Edit : Autant pour moi, l'exception est respectée. C'est parfait. Bravo et merci.

Je vais tenter de mixer vos 2 codes en rentrant du boulot, et je posterai le code final pour résoudre le problème (si j'y arrive). Merci pour votre aide. C'est vraiment appréciable.
marinms est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h52.


 
 
 
 
Partenaires

Hébergement Web