Duplicata possible:
PHP Trier un tableau multidimensionnel par élément contenant la date
J'ai des données XML ou JSON dans un tableau PHP qui ressemble à ceci:
[0]= array(2) {
["title"]= string(38) "Another title"
["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200"
}
[1]= array(2) {
["title"]= string(38) "My title"
["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200"
}
Ce que je veux faire, c'est commander les deux articles par date.
Ce que je ne veux pas faire
Je pourrais utiliser la date et la définir comme ID, mais cela ne me semble pas correct, car deux éléments peuvent avoir la même date et alors ce ne serait pas unique.
Vous n'avez pas besoin de convertir vos dates en horodatage avant le tri, mais c'est une bonne idée car il faudra plus de temps pour trier sans cela.
$data = array(
array(
"title" => "Another title",
"date" => "Fri, 17 Jun 2011 08:55:57 +0200"
),
array(
"title" => "My title",
"date" => "Mon, 16 Jun 2010 06:55:57 +0200"
)
);
function sortFunction( $a, $b ) {
return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($data, "sortFunction");
var_dump($data);
Utilisez sort :
usort($array, function($a1, $a2) {
$v1 = strtotime($a1['date']);
$v2 = strtotime($a2['date']);
return $v1 - $v2; // $v2 - $v1 to reverse direction
});
Je recommande d'utiliser des objets DateTime au lieu de chaînes, car vous ne pouvez pas facilement comparer des chaînes, ce qui est nécessaire pour le tri. Vous bénéficiez également d'avantages supplémentaires pour travailler avec des dates.
Une fois que vous avez les objets DateTime, le tri est assez simple:
usort($array, function($a, $b) {
return ($a['date'] < $b['date']) ? -1 : 1;
});