[php] Tableau associatif & array_multisort
Résolu
Logitux
Messages postés
111
Statut
Membre
-
Logitux Messages postés 111 Statut Membre -
Logitux Messages postés 111 Statut Membre -
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;