web-dev-qa-db-fra.com

PHP ordonner le tableau par date?

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.

  1. Est-il possible de trier par date, lorsque la valeur de tri est à l'intérieur de chaque élément?
  2. Dois-je convertir le format de date en horodatage?

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.

32
Jens Törnell

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);
78
KARASZI István

Utilisez sort :

usort($array, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});
33
phihag

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;
});
18
Ondřej Mirtes