Attribuer nombre pour données d'un tableau

Fermé
Coutcout86 Messages postés 195 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 26 mai 2016 - 17 janv. 2011 à 14:53
xamurai Messages postés 223 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 19 février 2013 - 17 janv. 2011 à 23:44
Bonjour,

J'ai un petit souci dans ma programmation en PHP. Voila j'ai un tableau de données comme ceci :

$tableau = array ('Pierre','Paul','Jack');

Et j'aimerai pour chaque données (donc pour chaque prénom leur attribuer un numéro mais au hasard. Donc j'ai utilisé la fonction rand de PHP et voila ce que cela donne :

foreach($tableau as $numPlace)
{
$numPlace = rand(1,3);
}


echo $tableau ;

Mais ce ne marche pas d'où peut venir mon erreur ?

Merci de bien me répondre
Romain.

2 réponses

xamurai Messages postés 223 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 19 février 2013 15
17 janv. 2011 à 15:36
Ta question est un peu mal formuler, mais j'ai l'impression que tu aimerais que les prenoms soient classés au hasard dans le tableau:

 <?php
     $tableau = array ('Pierre','Paul','Jack'); 
     $length = count($tableau);
      
      $tableaufinal = array();
      $position = 0;
     while($length > 0)
     {
        $r = rand(0 , $length);
         $tableaufinal[$position] = $tableau[$r];
         
          $tableau[$r] = $tableau[0];
          array_shift($tableau);
         
          ++ $position;
         --$length;
      }

       $print_r($tableau_final);
?>

2
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
17 janv. 2011 à 15:52
Très astucieux, mais ne serait-ce pas

$r = rand(0 , $length - 1);


Puisque c'est la valeur maximale a retourner, et que $length renvoi 3 au début, si le random donne 3.. Ca plante par un index out of range non ?
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 15:57
Oui c'est $length - 1.
0
xamurai Messages postés 223 Date d'inscription mardi 11 janvier 2011 Statut Membre Dernière intervention 19 février 2013 15
Modifié par xamurai le 17/01/2011 à 23:44
oui, c'est vrai... j'ai écris la fonction rapidement cet après-midi lorsque j'etais encore au boulot
0
Coutcout86 Messages postés 195 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 26 mai 2016
17 janv. 2011 à 15:45
A non pas du tout ! Effectivement ma question est mal formulé. Je vais expliqué concretement j'ai une liste d'élèves ( 68 personnes) avec un amphi (68 places) dont les places sont numérotés de 1 à 68 et enfaite j'aimerai placé au hasard les élèves sur une place. Voila ce que je veux faire. Est-ce plus compréhensible?? Désolé de mal formuler ma demande

Merci de bien me répondre
Romain.
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 15:47
Au final, si les prénoms sont classé au hasard dans le tableau, ton but n'est-il pas atteint?!
0
Coutcout86 Messages postés 195 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 26 mai 2016
17 janv. 2011 à 15:57
Non parce que mon tableau avec lequel il y a le nom des élèves sera classé par ordre alphabétique car la liste viendra d'un export excel. Et une fois que j'ai cette liste d'élèves il faut que je les place au hasard dans l'amphi donc il faut que j'attribue au hasard un numéro de place. Je veux pas que Monsieur A se retrouve à la place 1 et que Monsieur B à place 2
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
17 janv. 2011 à 16:03
Si tu gardes tes deux tableaux, celui qui contient tes élèves par ordre alphabétique et celui classe aleatoirement tu peux t'en sortir en prenant l'index de ton élève du premier tableau comme place dans la liste classée et l'index du même élève dans le deuxième tableau pour son attribution de place..
0
Coutcout86 Messages postés 195 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 26 mai 2016
17 janv. 2011 à 16:06
Désolé mais j'ai pas tout compris lol tu peut pas me donner un exemple ?? :s
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
17 janv. 2011 à 16:12
Exemple de résultat:

Tableau 1 (liste classée):
[0]=>Bernardo
[1]=>Jacques
[2]=>John
[3]=>Mamadou
[4]=>Rachid
[5]=>Yang

Tableau 2 (liste aléatoire):
[0]=>Mamadou
[1]=>Rachid
[2]=>Yang
[3]=>Bernardo
[4]=>Jacques
[5]=>John

Ton premier tableau les tri alphabétiquement, ton deuxième tableau te donnes les places grâce à l'index. Ainsi Yang sera à la place 2 et non à la 5.
0