[php] Tableau associatif & array_multisort [Résolu/Fermé]

Logitux 104 Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011 Dernière intervention - 30 mai 2011 à 16:10 - Dernière réponse : Logitux 104 Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011 Dernière intervention
- 3 juin 2011 à 08:57
Bonjour,

Je débute avec les tableaux associatif en php et un petit coup de main ne serait pas de refus :-)


Pour commencé j'ai un x requêtes mysql dans un tableau.
    $tblClip = array();
for($i=0; $i<=count($tblrequete)-1; $i++){
            $j = 0;
            $reponse = $bdd->query($tblrequete[$i]);

           
            while ($donnees = $reponse->fetch())
            {
                
                $yearTMP  = $donnees['year']; //On remplace le format de la date (JJ.MM.AAAA par AAAAMMJJ) pour trier par le plus récent, par la suite

                //On vérifie que les "0" sont présent (12.09.2011)
                if (strpos($yearTMP, '.') != 2){ //On commence par le jour, on cherche la position du point, si c'est 2
                    $yearTMP = "0".$yearTMP;
                }
                if(strrpos($yearTMP, '.') != 5){ //Le mois (Si la position du dernier point n'est pas égal à "5" alors il faut rajouter un zero à la position 3
                    $yearTMP = substr($yearTMP, 0, 3).'0'.substr($yearTMP, 3);
                }
                $yearTMP = substr($yearTMP, 6).substr($yearTMP, 3, 2).substr($yearTMP, 0, 2);

             
                //On ajoute les clips dans un tableau associtif
                 $tblClip[$i][$j] = array(
                                    'id_clip'    => $donnees['id_clip'],
                                    'artist'     => $donnees['artist'],
                                    'album'      => $donnees['album'],
                                    'title'      => $donnees['title'],
                                    'genre'      => $donnees['genre'],
                                    'added_date' => $donnees['added_date'],
                                    'year'       => $yearTMP,
                                    'length'     => $donnees['length']
                                   );
               $j++;
            }
        }


        $reponse->closeCursor(); // Termine le traitement de la requête




Ensuite je désire trier par la date que j'ai formatée tout à l'heure
                 foreach ($tblClip as $key => $row){
                    foreach ($tblClip[$key] as $col){
                        array_multisort($tblClip[$key][$col], SORT_DESC );
                     }
                 }



Tout de fois, je ne suis pas certain du procédé utilisé pour remplir le tableau (je dois dissocier en fonction des requêtes et je n'arrive pas à trier en fonction de la date sur ce tableau...

Je vous remercie d'avance :-)

Logitux

Afficher la suite 

5 réponses

Logitux 104 Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011 Dernière intervention - 31 mai 2011 à 13:39
0
Utile
Personne pour m'aider ?
mpmp93 6715 Messages postés mercredi 13 avril 2011Date d'inscription 28 septembre 2015 Dernière intervention - 31 mai 2011 à 14:04
0
Utile
3
Bonjour,

Et pourquoi vous triez pas dès le départ, c'est à dire au niveau de la requête SQL?

SELECT * , DATE_FORMAT("%d/%m/%Y", date) AS xdate
FROM mytable
ORDER BY date

ainsi vous aurez la date sous deux formes:
- date dans son format d'origine,
- xdate avec le format JJ/MM/AAAA

Et c'est certainement bien plus simple que de faire une vilaine 'cuisine' en PHP

A+
Logitux 104 Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011 Dernière intervention - 31 mai 2011 à 14:42
Je te remercie de ta réponse,
j'y ai également pensé. Voici ma requête
SELECT *, DATE_FORMAT('%d.%m.%Y', year) FROM t_clip ORDER BY ASC;

Il effectue bien un tri, mais pas comme il faut, il trie d'abord par jour, ensuite par mois et ensuite par années, ce qui donne ceci:

1.1.1990
1.1.2011
1.10.1994
1.10.2008
1.11.1990
etc...
C'est pour ceci que j'ai opté à le faire via php.
mpmp93 6715 Messages postés mercredi 13 avril 2011Date d'inscription 28 septembre 2015 Dernière intervention - 31 mai 2011 à 17:30
Bonjour,

SELECT *, DATE_FORMAT('%d.%m.%Y', year) FROM t_clip ORDER BY ASC;

Il faut avoir la date dans un seul champ de type date ou datetime

Ensuite, à supposer que la date soit dans un champ de type date et s'appelle ma_date, voici la bonne requête:

SELECT *, DATE_FORMAT('%d.%m.%Y', ma_date) AS xma_date FROM t_clip ORDER BY ma_date;
Logitux 104 Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011 Dernière intervention - 3 juin 2011 à 08:57
"Il faut avoir la date dans un seul champ de type date ou datetime "

En effet, je viens de réaliser que c'est du varchar -_-' .... Je vais faire une procédure du coup.

Merci pour ta réponse !