2011-08-19 3 views
11

Comment puis-je réarranger un tableau d'objets comme celui-ci:Tri un tableau d'objets par champ Date

[495] => stdClass Object 
     (
     [date] => 2009-10-31 18:24:09 
     ... 
     ) 
[582] => stdClass Object 
     (
     [date] => 2010-2-11 12:01:42 
     ... 
     ) 
... 

par la clé date, le plus ancien en premier?

Répondre

24
usort($array, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 

Ou si vous n'avez pas PHP 5.3:

function cb($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
} 
usort($array, 'cb'); 
+3

semble bon, et je recommande à l'OP de faire la date/heure de tri dans la base de données, et/ou revenir un horodatage unix simple ainsi que la valeur formatée, comme strtotime() a Frais généraux CONSIDÉRABLE et ferait le tri répété très e xpensive. –

+0

hmm .. mais il ne conserve pas les anciennes touches numériques .. – Nadine

+2

remplacer 'usort' par' uasort' alors – arnaud576875

2

Je voulais développer la réponse de arnaud576875. J'ai couru à travers ce même problème, mais en utilisant DateTime objets. C'est comme ça que j'ai pu accomplir la même chose.

usort($array, function($a, $b) { 
    return $a['date']->format('U') - $b['date']->format('U'); 
}); 
11

Depuis la question initiale est sur les tableaux de tri d'objets stdClass(), voici le code qui fonctionnerait si $ et $ b sont des objets:

usort($array, function($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
}); 

Ou si vous n'avez pas PHP 5.3:

function cb($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
} 
usort($array, 'cb'); 
+2

cela devrait être la bonne réponse. – devXen