2011-08-19 15 views
11

¿Cómo puedo volver a organizar una serie de objetos de esta manera:Ordenar un array de objetos de campo de fecha

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

por la clave date, antiguos primero?

Respuesta

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

O si usted no tiene PHP 5.3:

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

se ve bien, y se lo recomiendo a la OP que ver la fecha/tiempo de clasificación en la base de datos, y/o devolver una marca de tiempo Unix llanura junto con el valor con formato, como strtotime() tiene Sobrecarga CONSIDERABLE y haría una clasificación repetida muy e xpensivo. –

+0

hmm .. pero no mantiene las viejas teclas numéricas .. – Nadine

+2

reemplaza 'usort' por' uasort' luego – arnaud576875

2

que querían ampliar sobre la respuesta arnaud576875 's. Me encontré con este mismo problema, pero con el uso de objetos DateTime. Así es como pude lograr lo mismo.

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

Dado que la pregunta original se trata de ordenar matrices de stdClass() objetos, aquí está el código que funciona si $ ay $ b son objetos:

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

O si usted no tiene PHP 5.3:

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

esta debería ser la respuesta correcta. – devXen

Cuestiones relacionadas