[php] Tableau associatif & array_multisort
Résolu
Logitux
Messages postés
103
Date d'inscription
Statut
Membre
Dernière intervention
-
Logitux Messages postés 103 Date d'inscription Statut Membre Dernière intervention -
Logitux Messages postés 103 Date d'inscription Statut Membre Dernière intervention -
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.
Ensuite je désire trier par la date que j'ai formatée tout à l'heure
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
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
A voir également:
- [php] Tableau associatif & array_multisort
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
2 réponses
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+
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+
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.
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.
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;
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;