2011-02-20 2 views
1

Y a-t-il un moyen de trier le tableau suivant dans l'ordre chronologique correct?Tri d'un tableau bidimensionnel par date

[0] => Array 
    (
     [date] => Sat, 12 Feb 2011 16:55:13 -0500 
     [title] => Product 1 
     [link] => http://blabla/product-1 
    ) 

[1] => Array 
    (
     [date] => Sat, 25 Sep 2010 17:52:24 -0400 
     [title] => Product 2 
     [link] => http://blabla/product-2 
    ) 

[2] => Array 
    (
     [date] => Sun, 05 Dec 2010 17:41:32 -0500 
     [title] => Product 3 
     [link] => http://blabla/product-3 
    ) 

[3] => Array 
    (
     [date] => Sun, 28 Nov 2010 09:14:39 -0500 
     [title] => Product 4 
     [link] => http://blabla/product-4 
    ) 

[4] => Array 
    (
     [date] => Tue, 07 Dec 2010 18:43:45 -0500 
     [title] => Product 5 
     [link] => http://blabla/product-5 
    ) 

Le tableau, d'un flux RSS, me vient comme ça.

Je voudrais trier le tableau dans l'ordre chronologique (basé sur [date] évidemment): produit 1, produit 5, produit 3, produit 4, produit 2

Afin de pouvoir faire afficher les derniers produits dans le bon ordre (pas dans l'ordre étrange qu'ils m'ont donné! - btw, faux noms de produits, la commande est vraiment totalement aléatoire)

Merci beaucoup!

Répondre

2

Utilisation usort: http://www.phpbuilder.com/manual/function.usort.php

Vous écrivez une fonction de comparaison qui compare deux « éléments » (dans ce cas, vos chaînes de date), et renvoie l'ordre pour eux. Editer: vous pouvez utiliser strtotime: http://php.net/manual/en/function.strtotime.php pour convertir la chaîne de date en horodatage, puis renvoyer la comparaison des horodatages qui en résultent.

+0

Eh oui, je suis en utilisant usort mais je ne peux pas trouver la bonne et la comparaison correcte fonction ! (Je ne suis pas vraiment habitué à utiliser ces fonctions avec la date) – Max

+1

@Max: vous créez votre propre fonction comme ceci: 'function compareByDate ($ item1, $ item2) {return strtotime ($ item1 ['date']) - strtotime ($ item2 ['date']); } ', et passez le nom (' compareByDate') à usort. – Jonah

+0

ajouté plus d'informations sur la comparaison des dates – Bogatyr

2

Vous pouvez utiliser array_multisort commander le tableau original selon l'ordre d'un tableau de Date Sorted valeurs:

$keyValues = array(); 
foreach ($arr as $item) { 
    $keyValues[] = strtotime($item['date']); 
} 
sort($keyValues); 
array_multisort($arr, $keyValues);