Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: alexite le le 11-01-2004 a 11:51:32

Titre: $array[ligne][colone] : choisir "colone" avant "ligne"
Posté par: alexite le le 11-01-2004 a 11:51:32

Bonjour,

j'ai poster ce porblème sur un autre forum et personne n'a trouvé de solution...

Mon problème, j'ai un tableau de 10 colones et 100 lignes tels que :
$tab['ligne']['colone']. Sur chaque lignes j'ai une enregistrmenet de ma bd : $tab['10']['nom'] = François par exemple.

Or je veux classer mon tableau par Nom puis Prenom, je devrais utiliser la fontion multishort un peu comme ceci :

array_multisort($tabl['0']['nom'],$tab['0']['prenom]);

Sauf que le ['0'] est en trop, et je ne vois pas comment pouvoir spécifier la colone 'nom' sans dabord choisir la lignes :-(.

Merci d'avance.

Titre: Re:$array[ligne][colone] : choisir "colone" avant "ligne"
Posté par: erwinol le le 11-01-2004 a 12:39:43

Ben déjà il y a un problème parce que

$tab[100][10]

C'est un tableau de 100 tableaux de 10 ... eh oui en mémoire c'est pas une matrice ;)

Tu pourrais construire toi-même un algorithme de tri en te basant sur ceux qui existent déjà.

Sinon essaye toujours en utilisant $tab[]['nom'] et $tab[]['prenom'].

Titre: Re:$array[ligne][colone] : choisir "colone" avant "ligne"
Posté par: alexite le le 11-01-2004 a 13:07:10

vi pour la matirce, je sais qu'en mémoire c'est pas comme dans une base sql, mais pour l'expliquer c'étais plus simple :-).

Sinon bien j'ai fais comme tu le disais, j'ai utilisé l'algorithme de tri bulle, et voila ce que j'ai fais, qui permet de trier a partir de 2 champs de la deuxième dimension, dnas l'ordre choisis :

         function array_multisort_d2($tableau,$triChamp1,$triOrdre1,$triChamp2,$triOrdre2){

            function inverser($tableau, $pos1, $pos2) {
               $temp = $tableau[$pos1];
               $tableau[$pos1] = $tableau[$pos2];
               $tableau[$pos2] = $temp;
               return $tableau;
            }
      
            $nbEnregistrement = count($tableau);

            for ($bubble = $nbEnregistrement; $bubble > 1; $bubble--){
               for ($position = 1; $position < $bubble; $position++){
                  if ( ( $tableau[$position][$triChamp1]>$tableau[$position+1][$triChamp1] ) && $triOrdre1=='SORT_ASC'){
                     $tableau = inverser($tableau,$position,$position+1);
                  }
                  elseif ( ( $tableau[$position][$triChamp1]<$tableau[$position+1][$triChamp1] ) && $triOrdre1=='SORT_DESC'){
                     $tableau = inverser($tableau,$position,$position+1);
                  }
                  elseif ( $tableau[$position][$triChamp1] == $tableau[$position+1][$triChamp1] ){

                     if( ( $tableau[$position][$triChamp2]>$tableau[$position+1][$triChamp2] ) && $triOrdre2=='SORT_ASC'){
                        $tableau = inverser($tableau,$position,$position+1);
                     }
                     elseif ( ( $tableau[$position][$triChamp2]<$tableau[$position+1][$triChamp2] ) && $triOrdre2=='SORT_DESC'){
                        $tableau = inverser($tableau,$position,$position+1);
                     }
                  }
               }
            }

            return $tableau;
         }

Titre: Re:$array[ligne][colone] : choisir "colone" avant "ligne"
Posté par: erwinol le le 11-01-2004 a 23:43:39

Le tri bulle n'est pas très performant quand tu travailles avec un nombre élevé d'enregistrements mais ça fait plaisir de voir quelqu'un sur FW qui connait les algorithmes :)

Il fonctionne que tu le souhaites ton algorithme ?


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.