Posez votre question Signaler

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

Logitux 104Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011Dernière intervention - Dernière réponse le 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
Lire la suite 
Réponse
+0
moins plus
Personne pour m'aider ?
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
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 104Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011Derniè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.
Répondre
mpmp93 6371Messages postés mercredi 13 avril 2011Date d'inscription 30 mai 2015Derniè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;
Répondre
Logitux 104Messages postés lundi 30 mai 2011Date d'inscription 28 septembre 2011Derniè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 !
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Ce document intitulé «  [php] Tableau associatif & array_multisort  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.