Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2952 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Problème affichage tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Problème affichage tableau

n°2193983
stylix
Posté le 12-06-2013 à 15:40:21  profilanswer
 

Bonjour à tous,
 
Je me retrouve face à un problème et je ne comprends pas le pourquoi du comment.  
Je détails :
 
J'ai un tableau qui est construit en fonction d'un résultat de ma SP :
 

Code :
  1. $salaries[$i][0] = $data['ID_USERPREF'];
  2. $salaries[$i][1] = strtolower($data['perNom']);
  3. $salaries[$i][2] = $data['perPrenom'];
  4. $salaries[$i][3] = $data['orpOrder'];


 
Certes jusque là rien de bien compliqué, tout çà dans une boucle while et tout le tralala.
 
Mon problème arrive !
Je fais un joli  
 

Code :
  1. print_r($salaries);


 
Et voilà ce que je j'obtiens :
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => 37
  6.             [1] => tartanpion
  7.             [2] => Marc
  8.             [3] => 0
  9.         )
  10.     [1] => Array
  11.         (
  12.             [0] => 55
  13.             [1] => Rosbeef
  14.             [2] => Yann
  15.             [3] => 0
  16.         )
  17.     [2] => Array
  18.         (
  19.             [0] => 7
  20.             [1] => Bon
  21.             [2] => Jean
  22.             [3] => 1
  23.         )
  24.     [3] => Array
  25.         (
  26.             [0] => 32
  27.             [1] => Hendrix
  28.             [2] => Jimi
  29.             [3] => 2
  30.         )
  31.     [4] => Array
  32.         (
  33.             [0] => 23
  34.             [1] => Guy
  35.             [2] => Buddy
  36.             [3] => 3
  37.         )
  38. )


 
Parfois, en plus c'est dans l'ordre que je veux !
Mais quand je veux écrire mon tableau pour faire tout joli, voilà l'ordre dans lequel çà m'affiche :
 

Code :
  1. B. Guy
  2. J. Bon
  3. J. Hendrix
  4. M. Tartanpion
  5. Y. Rosbeef


 
En gros par ordre alphabétique ... mes questions, pourquoi ? et comment faire pour changer çà ?  
 
Merci d'avance !


Message édité par stylix le 14-06-2013 à 11:31:45
mood
Publicité
Posté le 12-06-2013 à 15:40:21  profilanswer
 

n°2194013
dreameddea​th
Posté le 12-06-2013 à 17:51:10  profilanswer
 

Je pense que tu veux faire :
- un tri "complexe" (en fonction d'un sous-tableau)
- faire une boucle d'affichage
 
le Tri complexe est faisable via la fonction usort
Et la boucle, boucle d'affichage c'est pas trop dur non ?  (mais ce n'est pas print_r)
 
 
Tu peux nous montrer ta boucle d'affichage actuelle (elle semble exister non ?)


Message édité par dreameddeath le 12-06-2013 à 17:53:14
n°2194081
stylix
Posté le 13-06-2013 à 11:18:38  profilanswer
 

Voilà ma boucle d'affichage  
 

Code :
  1. for($w=0;$w<count($salaries); $w++)
  2.      {
  3.       $this->display .= "<tr ";
  4.       if($_SESSION['userarray']['perID'] == $salaries[$w][0])
  5.        $this->display .= "class='selectedtd' ";
  6.       $this->display .= ">";
  7.       $this->display .= "<td>";
  8.        $this->display .=  substr($salaries[$w][2],0,1).". ".ucfirst($salaries[$w][1]);
  9.       $this->display .= "</td>";
  10.       $this->display .= "</tr>";
  11.      }


 
Je l'ai simplifié pour ici, car c'est cette partie qui nous intéresse.  
 
Je sais que ce n'est pas un print_r  ;)


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194082
stylix
Posté le 13-06-2013 à 11:20:51  profilanswer
 

Ah j'ai failli oublié, le tri que je voudrai faire est sur cette clé : (celle en rouge, c'est mon ordre)
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => 37
  6.             [1] => tartanpion
  7.             [2] => Marc
  8.             [3] => 0
  9.         )
  10.     [1] => Array
  11.         (
  12.             [0] => 55
  13.             [1] => Rosbeef
  14.             [2] => Yann
  15.             [3] => 0
  16.         )
  17.     [2] => Array
  18.         (
  19.             [0] => 7
  20.             [1] => Bon
  21.             [2] => Jean
  22.             [3] => 1
  23.         )
  24.     [3] => Array
  25.         (
  26.             [0] => 32
  27.             [1] => Hendrix
  28.             [2] => Jimi
  29.             [3] => 2
  30.         )
  31.     [4] => Array
  32.         (
  33.             [0] => 23
  34.             [1] => Guy
  35.             [2] => Buddy
  36.             [3] => 3
  37.         )
  38. )


Message édité par stylix le 13-06-2013 à 11:21:11

---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194113
dreameddea​th
Posté le 13-06-2013 à 13:06:27  profilanswer
 

Je ne suis pas sûr de comprendre : tu dis que le tableau "change d'ordre" en cours de route, c'est ça ?
 
Si c'est le cas, c'est bizarre. Sinon, comme je l'ai déjà écrit, il suffit d'utiliser usort pour des tri arbitrairement complexes (et foreach est plus propre/lisible que for($i=0;$i<count(...);$i++)
 
Exemple :

Code :
  1. usort($salarie,
  2.     function($a,$b){
  3.         return ($a[3]>$b[3])?1:(($a[3]<$b[3])?-1:0); // compare le 3ème champ du tableau
  4.     });
  5. foreach($salaries as $salarie){
  6.     echo '<div>'.$salarie[1].' '.$salarie[2]. '</div>'.PHP_EOL;
  7. }


Message édité par dreameddeath le 13-06-2013 à 14:21:13
n°2194122
stylix
Posté le 13-06-2013 à 14:14:10  profilanswer
 

En fait quand je dis change d'ordre, c'est pas vraiment ce que je veux ire (je sais je suis tordu :P)
Disons que je voudrai savoir si c'est normal que quand je fais un print_r, mon tableau est affiché dans un certain ordre, mais quand je l'affiche dans ma boucle, il est dans un autre ...
 
Pourquoi il ne garde pas le même ordre que l'affichage du print_r ?
 
Je vais essayé ton bout de code ;)


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194139
stylix
Posté le 13-06-2013 à 15:08:56  profilanswer
 

Ton code marche, mais pas avec mon tableau...
Je m'explique :

 

Je met ton code, j'ai bien l'ordre que je veux.

 
Code :
  1. usort($salarie,
  2.  function($a,$b){
  3.   return ($a[3]>$b[3])?1:(($a[3]<$b[3])?-1:0); // compare le 3ème champ du tableau
  4.  });
  5.  foreach($salaries as $salarie){
  6.   echo '<div>'.$salarie[1].' '.$salarie[2]. '</div>'.PHP_EOL;
  7.  }
 

Me donne bien :

Code :
  1. tartanpion
  2. Yann
  3. Jean
  4. Jimi
  5. Buddy
 

Mais avec mon tableau çà me donne :

 
Code :
  1. foreach($salaries as $salarie){
  2.       $this->display .= "<tr ";
  3.       if($_SESSION['userarray']['perID'] == $salarie[0])
  4.        $this->display .= "class='selectedtd' ";
  5.       $this->display .= ">";
  6.       $this->display .= "<td>";
  7.        $this->display .=  substr($salarie[2],0,1).". ".ucfirst($salarie[1]);
  8.       $this->display .= "</td>";
  9.       for($i=0; $i<$nbjou +1; $i++)
  10.       {
  11.        $jour=$datedebut+($i*60*60*24);
  12.        $jourDate = date('d/m/Y', $jour);
  13.        $this->display .= "<td id='".$jourDate."' name='".$jourDate."' ";
  14.        if(date('w',$jour) == "0" || date('w',$jour) == "6" )
  15.         $this->display .= " style='background-color: ".$weekend.";' ";
  16.        // gestion jours fériés
  17.        $key=false;
  18.        $value=$jour;
  19.        $key = in_array($value,(array)$ferie); // $key = 2;
  20.        if($key)
  21.         $this->display .= " style='background-color: ".$feriecolor.";' ";
  22.        $this->display .= " >";
  23.        $this->display .= "</td>";
  24.       }
  25.       $this->display .= "</tr>";
  26.      }
 

Et mais çà s'affiche par ordre alphabétique ...

  



Message édité par stylix le 13-06-2013 à 15:09:42

---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194149
dreameddea​th
Posté le 13-06-2013 à 15:55:55  profilanswer
 

alors là je sèche... C'est la première fois que j'entends parler d'un tableau php qui se "réorganise" entre 2 lignes de codes sans modif/tri...
 
Si tu fais un

Code :
  1. $this->display.='<tr><td>'.print_r($salaries,true).'</td><td></td></tr>'.PHP_EOL;
  2. foreach(...){
  3.     ...
  4. }


 
ça donne quoi ?


Message édité par dreameddeath le 13-06-2013 à 15:56:09
n°2194155
stylix
Posté le 13-06-2013 à 16:11:51  profilanswer
 

Bah quand je fais çà, la première ligne, le print_r, me donne bien ma ligne dans le bon ordre, et dès que j'arrive dans le foreach çà se barre en vrac ....
Incompréhensible !
 
Question annexe : a quoi sert le

Code :
  1. .PHP_EOL

?


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194157
stylix
Posté le 13-06-2013 à 16:22:54  profilanswer
 

J'essaye de te donner plus de détails :  
 
Je mets ton code :
 

Code :
  1. usort($salarie,
  2.  function($a,$b){
  3.   return ($a[3]>$b[3])?1:(($a[3]<$b[3])?-1:0); // compare le 3ème champ du tableau
  4.  });
  5.  foreach($salaries as $salarie){
  6.   echo '<div>'.$salarie[1].' '.$salarie[2]. '</div>'.PHP_EOL;
  7.  }


 
J'obtiens çà :
 

Code :
  1. tartanpion
  2. Yann
  3. Jean
  4. Jimi
  5. Buddy


 
Et voilà juste en dessous ce qu'il y a :  
 

Code :
  1. $this->display .= "
  2. <table>
  3. <thead>
  4. <tr>
  5.  <th></th>";
  6.  $mois = array("","Jan","Fev","Mar","Avr","Mai","Juin","Jui","Aout","Sep","Oct","Nov","Dec" );
  7.  for($i=0; $i<$nbjou+1; $i++)
  8.  {
  9.   $jour=$datedebut+($i*60*60*24);
  10.   $this->display .= "<th>";
  11.   $this->display .= $mois[date('n',$jour)]." ".date('Y',$jour);
  12.   $this->display .= "</th>";
  13.  }
  14.  $this->display .= "
  15.  </tr>
  16.  <tr>
  17.   <th> Salaries </th> ";
  18.    for($i=0; $i<$nbjou+1; $i++)
  19.    {
  20.     $jour=$datedebut+($i*60*60*24);
  21.     $this->display .= "<th ";
  22.     if($datedujour == date('Y-m-d', $jour))
  23.      $this->display .= "style='color:red;font-size:20px;' ";
  24.     $this->display .= ">";
  25.     if($datedujour == date('Y-m-d', $jour))
  26.      $this->display .= "<span id='datedujour' name='datedujour'></span> ";
  27.     $this->display .=  $joursemaine[date('w',$jour)].' '.date("d",$jour);
  28.     $this->display .= "</th>";
  29.    }
  30.   $this->display .= "</tr>
  31.  </thead>
  32.  <tbody> ";
  33.    $weekend="#D7DDEF";
  34.    foreach($salaries as $salarie){
  35.     $this->display .= "<tr ";
  36.     if($_SESSION['userarray']['perID'] == $salarie[0])
  37.       $this->display .= "class='selectedtd' ";
  38.     $this->display .= ">";
  39.     $this->display .= "<td>";
  40.       $this->display .=  substr($salarie[2],0,1).". ".ucfirst($salarie[1]);
  41.     $this->display .= "</td>";
  42.     for($i=0; $i<$nbjou +1; $i++)
  43.     {
  44.       $jour=$datedebut+($i*60*60*24);
  45.       $jourDate = date('d/m/Y', $jour);
  46.       $this->display .= "<td id='".$jourDate."' name='".$jourDate."' ";
  47.       if(date('w',$jour) == "0" || date('w',$jour) == "6" )
  48.     $this->display .= " style='background-color: ".$weekend.";' ";
  49.       // gestion jours fériés
  50.       $key=false;
  51.       $value=$jour;
  52.       $key = in_array($value,(array)$ferie); // $key = 2;
  53.       if($key)
  54.     $this->display .= " style='background-color: ".$feriecolor.";' ";
  55.       $this->display .= " >";
  56.       $this->display .= "</td>";
  57.     }
  58.     $this->display .= "</tr>";
  59.     }
  60.  $this->display .= "</tbody>
  61. </table>";


 
Et là mon ordre devient :  
 

Code :
  1. Buddy
  2. Jean
  3. Jimi
  4. tartanpion
  5. Yann


 
 :ouch:  :ouch:  :heink:  :heink:  
 


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
mood
Publicité
Posté le 13-06-2013 à 16:22:54  profilanswer
 

n°2194160
dreameddea​th
Posté le 13-06-2013 à 17:02:13  profilanswer
 

Mais je ne vois pas l'appel à "usort" dans ton code (le complet).
 
Et sinon, il vaut vraiment mieux faire appel à un moteur de template (twig, smarty...) c'est quand même plus lisible


Message édité par dreameddeath le 13-06-2013 à 17:03:36
n°2194164
stylix
Posté le 13-06-2013 à 17:28:01  profilanswer
 

Il y est c'est moi qui ai fauté au moment du copier coller. Il est juste avant la bouche for, comme dans ton exemple ...
 
Je sais que c'est plus propre avec un moteur de template mais projet professionnel cela a été décidé de faire sans ....
 
Bon bah je crois que çà va rester un mystère !  :??:  :??:


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
n°2194256
stylix
Posté le 14-06-2013 à 11:29:55  profilanswer
 

Bon aller ce matin j'étais de bonne humeur, et je me suis dis je vais résoudre ce problème !
Et je l'ai résolu, quand j'ai trouvé la solution, en à peu près 10 secondes, je me suis dis, je vais me mettre une balle dans la tête !  :fou:  
 
Côté PHP tout est parfait ! Mais j'avais un petit détail, vraiment léger, j'utilise le plugin Datatables pour mon tableau, et ce c**, il tri le tableau tout seul !
 
Conclusion, je suis un boulet  :sweat:  
 
En tout cas merci quand même pour le usort, je ne me suis pas couché débile !  :pt1cable:


---------------
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Problème affichage tableau

 

Sujets relatifs
Problème affichage tableau de taille variableproblème avec de manager.canvas.draw de matplotlib et gobject.idle_add
Probleme StringTokenizer et tableau[php] Problème affichage tableau avec timer
Probleme Affichage Background dans TableauProbleme d'affichage de tableau 2d
Problème d'affichage de tableau : vertical Firefox / Horizontal IEProbléme de copie de tableau et d'affichage
Problème d'affichage d'un tableauprobleme d affichage avec un tableau html
Plus de sujets relatifs à : [Résolu] Problème affichage tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR