[RESOLU] Tableau php, multi colonne?

Tableau php, multi colonne? [RESOLU] - PHP - Programmation

Marsh Posté le 22-08-2006 à 11:26:55    

Bonjour, je voudrai savoir, s'il était possible de rassemblée plusieur tableaux pour pouvoir le trié par rapport à une colonne.
 
Mes tableaux sont du style :
 
$mc1[]
$mc2[]
$mc3[]
$comptpert[] (colonne qui sert au trie)
 
j'ai trouver cette méthode array_multisort, mais je n'arrive pas à m'en servir, j'ai pourtant regarder le site php.net, mais j'ai du loupé quelque chose, Merci d'avance


Message édité par mule_panda le 23-08-2006 à 12:01:10
Reply

Marsh Posté le 22-08-2006 à 11:26:55   

Reply

Marsh Posté le 22-08-2006 à 11:37:45    

array_multisort ne te servira pas à grand chose, ou alors je n'ai pas bien compris la question.
 
Créer un tableau multidimensionnel regroupant tes tableaux ne devrait pas te poser de problème, non?
Une fois que c'est fait tu devrais t'en sortir en utilisant usort(), je pense...

Reply

Marsh Posté le 22-08-2006 à 11:53:04    

Enfaite, je ne voi pas trop comment crer le tableaux multidimensionnel regroupand des tableau deja existant, il faut utilisé une boucle FOR, car sinon pour creer un tableau multidimensionnel je pense savoir faire:
 

Code :
  1. $table['motcles']['0']['mc1]='chose';

Reply

Marsh Posté le 22-08-2006 à 12:07:42    

Ca dépend de ce sont les tableaux que tu veux regrouper, en fait...et du sens que ça a de les regrouper...
 
Mais bon par exemple tu peux sans problème créer un tableau avec une boucle du style :

Code :
  1. foreach($comptpert as $key=>$val){
  2. $monbotablo[$val]= array($mc1[$key], $mc2[$key], $mc3[$key]);
  3. }

Reply

Marsh Posté le 22-08-2006 à 13:40:30    

Si tu veut je voudrai avoir un tableau recemplant a ceci
 
MC1      | MC2      | MC3       | COMPTPERT
-------------------------------------------
debian   |linux      |logo         |2
yeux     |maron    |logo         |4
boite     |ferme    |carton      |4
windows |os        |faille        |3
php       |prog      |web        |1
 
Désolé, il est pas trés beau mon tableau :( , mais il montre en gros le résultat  
Et aprés je souhaite simplement trié les lignes du tableau par ordre croissant en ce bassant sur la derniére colonne

Reply

Marsh Posté le 22-08-2006 à 13:45:47    

c'est représentatif tes colonnes?
Tu as une des colonnes qui est utilisable comme indice?
Si c'est pas le cas il suffit de modifier mon exemple précédent comme ceci :
 

Code :
  1. foreach($comptpert as $key=>$val){
  2. $monbotablo[$key]= array($mc1[$key], $mc2[$key], $mc3[$key], $val);
  3. }


 
Ensuite tu écris simplement ta fonction de comparaison, et usort()...


Message édité par skeye le 22-08-2006 à 13:46:00
Reply

Marsh Posté le 22-08-2006 à 14:13:17    

Je suis un peu perdu, la fonction comparation va enfaite comparé la colonne indice a la colonne $comptpert?
 
Mais je ne comprend la fonction de la premiére ligne??  :??:  
 
Ensuiste comment faire pour affiché une ligne du tableau?

Reply

Marsh Posté le 22-08-2006 à 14:14:50    

http://fr3.php.net/manual/fr/function.usort.php
 
print_r($monbotablo) si tu vois pas comment il est fait...


Message édité par skeye le 22-08-2006 à 14:15:54
Reply

Marsh Posté le 22-08-2006 à 14:54:59    

Code :
  1. foreach($comptpert as $key=>$val){
  2.       $table[$key]= array($mc1[$key], $mc2[$key], $mc3[$key], $val);
  3.  
  4.       }


 

Code :
  1. Array ( [0] => Array ( [0] => debian [1] => linux [2] => os [3] => 1 ) [1] => Array ( [0] => debian [1] => linux [2] => os [3] => 1 ) [2] => Array ( [0] => debian [1] => linux [2] => os [3] => 1 ) )


 
Je pense avoir tout comprix sauf comment affiché par exemple le premier enregistrement de mon tableau : "debian"


Message édité par mule_panda le 22-08-2006 à 14:55:58
Reply

Marsh Posté le 22-08-2006 à 14:56:53    

$table[0][0]

Reply

Marsh Posté le 22-08-2006 à 14:56:53   

Reply

Marsh Posté le 22-08-2006 à 15:01:23    

J'avai essayer mais il me marque "Array[0]"

Reply

Marsh Posté le 22-08-2006 à 15:05:17    

hein? [:autobot]
Comme c'est fait là, tu as un tableau appelé $table, qui contient 3 éléments aux indices 0, 1 et 2.
Ces éléments sont eux-mêmes des tableaux, contenant de nouveaux éléments aux indices 0, 1 et 2
Donc $table[0][0] devrait te donner le premier élément du premier élément de ton tableau $table... [:urd]

Reply

Marsh Posté le 22-08-2006 à 15:08:06    

Voiçi  le bout de code qui devrai affiché la valeur
 

Code :
  1. echo ("Mot clé 1 : $table[0][0]" );


 
[EDIT]=je l'ai supprimé sans le faire expret  :whistle:


Message édité par mule_panda le 22-08-2006 à 15:10:30
Reply

Marsh Posté le 22-08-2006 à 15:09:15    

manque un " :D
 
tu veux pas filer un peu du code que tu as avant ça, que je comprenne ce qui ne va pas?

Reply

Marsh Posté le 22-08-2006 à 15:12:52    

Je previen d'avance mon code n'est pas beau, et loin d'etre au point  :lol:
 
Je n'ai pas mi le tout debut de mon code (trop long, je pourrai le mettre si besoin) donc il manquera des { et des variables non déclaré
 

Code :
  1. // ####################################################################################
  2. // *********************************************
  3. // === Création requete sql, pour la recherche SQL ===
  4. // *********************************************
  5. //requete SQL du premier mot clé en fontion de $as
  6. $sql = "SELECT m.Mot_cle_1, m.Mot_cle_2, m.Mot_cle_3, m.Mot_cle_4, m.Mot_cle_5, m.idNom, t.idNom, t.Descriptif, i.idNom, i.Nom, i.Dossier
  7. FROM mot_cle m, texte t, image i
  8. WHERE  m.idNom=t.idNom
  9. AND m.idNom=i.idNom
  10. AND (Mot_cle_1 LIKE '$as[1]$motsCles[1]$as[1]'";
  11. // On rajoute les autre mot clé
  12. for($i=1;$i<=5;$i++){
  13.  $mot_cle="m.Mot_cle_".$i;
  14.  for($j=1;$j<=$nombreMotsCles;$j++){
  15.   $sql .= " OR $mot_cle LIKE '$as[$j]$motsCles[$j]$as[$j]'";
  16.  }
  17. }
  18. //On ferme le paenthése regroupant les OR
  19. $sql.=" )";
  20. //Affichage de la variable SQL (requete pour le controle des résultats
  21. print  ($sql."<br>" );
  22. //Exécution de la requete
  23. $result = mysql_query($sql);
  24. //Comptage du nombre de résultat trouvé
  25. $nb_result=mysql_num_rows($result);
  26. // On recupère les données trouvés et on les met dans des tableau variables
  27.     while ($data = mysql_fetch_array($result)) {
  28.  $mc1[]=$data['Mot_cle_1'];
  29.  $mc2[]=$data['Mot_cle_2'];
  30.  $mc3[]=$data['Mot_cle_3'];
  31.  $mc4[]=$data['Mot_cle_4'];
  32.  $mc5[]=$data['Mot_cle_5'];
  33.  $des[]=$data['Descriptif'];
  34.  $idNom[]=$data['idNom'];
  35.  $nom[]=$data['Nom'];
  36.  $dos[]=$data['Dossier'];
  37.       }
  38. for($g=0;$g<$nb_result;$g++){
  39.  $comptpert[$g]=0;
  40.  if(isset($motsCles[5])){
  41.   if($mc1[$g]==$motsCles[1]&&$mc2[$g]==$motsCles[2]&&$mc3[$g]==$motsCles[3]&&$mc4[$g]==$motsCles[4]&&$mc5[$g]==$motsCles[5]){
  42.   $comptpert[$g]=$comptpert[$g]+5;}
  43.  }
  44.  if(isset($motsCles[4])){
  45.   if($mc1[$g]==$motsCles[1]&&$mc2[$g]==$motsCles[2]&&$mc3[$g]==$motsCles[3]&&$mc4[$g]==$motsCles[4]){
  46.   $comptpert[$g]=$comptpert[$g]+4;}
  47.  }
  48.  if(isset($motsCles[3])){
  49.   if($mc1[$g]==$motsCles[1]&&$mc2[$g]==$motsCles[2]&&$mc3[$g]==$motsCles[3]){
  50.   $comptpert[$g]=$comptpert[$g]+3;}
  51.  }
  52.  if(isset($motsCles[2])){
  53.   if($mc1[$g]==$motsCles[1]&&$mc2[$g]==$motsCles[2]){
  54.   $comptpert[$g]=$comptpert[$g]+2;}
  55.  }
  56.  for($k=0;$k<=$nombreMotsCles;$k++){
  57.   if($mc1[$g]==$motsCles[$k]){
  58.   $comptpert[$g]=$comptpert[$g]+1;}
  59.   }
  60.  for($k=0;$k<=$nombreMotsCles;$k++){
  61.   if($mc2[$g]==$motsCles[$k]){
  62.   $comptpert[$g]=$comptpert[$g]+1;}
  63.   }
  64.  for($k=0;$k<=$nombreMotsCles;$k++){
  65.   if($mc3[$g]==$motsCles[$k]){
  66.   $comptpert[$g]=$comptpert[$g]+1;}
  67.   }
  68.  for($k=0;$k<=$nombreMotsCles;$k++){
  69.   if($mc4[$g]==$motsCles[$k]){
  70.   $comptpert[$g]=$comptpert[$g]+1;}
  71.   }
  72.  for($k=0;$k<=$nombreMotsCles;$k++){
  73.   if($mc5[$g]==$motsCles[$k]){
  74.   $comptpert[$g]=$comptpert[$g]+1;}
  75.   }
  76. }
  77. print ("nombre de point de pertinence : ".$comptpert[0]."<br>" );
  78.       foreach($comptpert as $key=>$val){
  79.       $table[$key]= array($mc1[$key], $mc2[$key], $mc3[$key], $val);
  80.  
  81.       }
  82.   print_r($table);
  83. //*********************
  84. // On affiche les resultats
  85. //*********************
  86. echo ("<br>Le moteur de recherche à trouvée : ".$nb_result." résultats.<br>" );
  87.  
  88. print ("Mot clé 1 : $table[0][0]<br>" );
  89.  
  90. for($h=0;$h<$nb_result;$h++){
  91. echo ("Mot clé 1 : $table[0][0]<br>" );
  92. echo ("Mot clé 2 : $mc2[$h]<br>" );
  93. echo ("Mot clé 3 : $mc3[$h]<br>" );
  94. echo ("Mot clé 4 : $mc4[$h]<br>" );
  95. echo ("Mot clé 5 : $mc5[$h]<br>" );
  96. echo ("Descriptif : $des[$h]<br>" );
  97. echo ("Id nom : $idNom[$h]<br>" );
  98. echo ("nom image : $nom[$h]<br>" );
  99. echo ("dossier : $dos[$h]<br/>" );
  100.  
  101. $chemin="/mini/$dos[$h]/";
  102. $nomc="$nom[$h]"."mini.jpg";
  103. echo "<img src=$chemin$nomc>";
  104.  
  105. // On sépare les resultats
  106. echo '<hr size="1" width="100">';
  107. }
  108. }


 
A la ligne 100 j'ai mi le PRINT en dehor du FOR pour tester, avec ECHO ou PRINT


Message édité par mule_panda le 22-08-2006 à 15:14:25
Reply

Marsh Posté le 22-08-2006 à 15:17:54    

J'ai un doute sur l'interprétation du $table[0][0] dans les "" dans un print, là...s'il affiche Array[0][0] c'est qu'il essaye d'afficher $table, puis [0][0] comme du texte simple on dirait...[:joce]
 
essaie plutôt ça pour voir:

Code :
  1. echo 'Mot clé 1 :', $table[0][0], '<br>'

Reply

Marsh Posté le 22-08-2006 à 15:20:59    

C'est bon cela marche trés bien, merci beaucoup, il me reste plus cas le trié, j'espére que sa ira , merci de m'avoir aider  :jap:

Reply

Marsh Posté le 22-08-2006 à 16:07:41    

Je suis arrivé a trié mon tableau en partie car en faite cela me trie que la premiére colonne et donc sa me mélange tout, donc je ne voit pas le d'ou vient le probléme
 

Code :
  1. function cmp1($a,$b) {
  2.     if ($a[3] == $b[3])
  3.         return 0;
  4.     return ($a[3] > $b[3]) ? -1 : 1;
  5. }
  6. usort($table, "cmp1" );
  7. print_r($table);


Message édité par mule_panda le 22-08-2006 à 18:38:05
Reply

Marsh Posté le 22-08-2006 à 18:50:33    

:??:

Reply

Marsh Posté le 22-08-2006 à 19:12:30    

grumpf...je vois pas trop ce qui cloche, là...[:urd]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-08-2006 à 21:26:38    

En faite je ne sai pas trop s'il cela vien de ce bout de code ou du reste, je verrai sa demain, se soir dodo (enfin)

Reply

Marsh Posté le 23-08-2006 à 12:00:49    

en faite je m'excuse mais l'erreur venai d'ailleur, en faite j'utilisé mais ancien tableau séparé pour afffiché et non le tableau multidimensionnel et le trie fonctionne parfaitement. Merci beaucoup skeye tu m'as été d'une aide présieuse

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed