Attribuer nombre pour données d'un tableau

Coutcout86 Messages postés 219 Statut Membre -  
xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
     
    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
    1. chico200987 Messages postés 856 Statut Membre 144
       
      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
    2. Akronos Messages postés 163 Statut Membre 32
       
      Oui c'est $length - 1.
      0
    3. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
       
      oui, c'est vrai... j'ai écris la fonction rapidement cet après-midi lorsque j'etais encore au boulot
      0
  2. Coutcout86 Messages postés 219 Statut Membre
     
    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
    1. Akronos Messages postés 163 Statut Membre 32
       
      Au final, si les prénoms sont classé au hasard dans le tableau, ton but n'est-il pas atteint?!
      0
    2. Coutcout86 Messages postés 219 Statut Membre
       
      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
    3. chico200987 Messages postés 856 Statut Membre 144
       
      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
    4. Coutcout86 Messages postés 219 Statut Membre
       
      Désolé mais j'ai pas tout compris lol tu peut pas me donner un exemple ?? :s
      0
    5. Akronos Messages postés 163 Statut Membre 32
       
      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