array - Cómo ordenar una matriz de fecha en PHP
strtotime (4)
Tengo una matriz en este formato:
Array
(
[0] => Array
(
[28th February, 2009] => ''bla''
)
[1] => Array
(
[19th March, 2009] => ''bla''
)
[2] => Array
(
[5th April, 2009] => ''bla''
)
[3] => Array
(
[19th April, 2009] => ''bla''
)
[4] => Array
(
[2nd May, 2009] => ''bla''
)
)
Quiero ordenarlos en orden ascendente de fechas (según el mes, el día y el año). ¿Cuál es la mejor manera de hacer eso?
Originalmente, los correos electrónicos se están recuperando en el formato de fecha de MySQL, por lo que es posible para mí obtener la matriz en este estado:
Array
[
[''2008-02-28'']=''some text'',
[''2008-03-06'']=''some text''
]
¿Quizás cuando esté en este formato, pueda recorrerlas, eliminar todas las marcas ''-''
(guión) para que queden como enteros, ordenarlas usando array_sort()
y recorrerlas una vez más para ordenarlas? Preferiría si hubiera otra forma, ya que estaría haciendo 3 bucles con esto por usuario.
Gracias.
Edit: Yo también podría hacer esto:
$array[$index]=array(''human''=>''28 Feb, 2009'',
''db''=>''20080228'',
''description''=>''Some text here'');
Pero al usar esto, ¿habría alguna forma de ordenar la matriz basándose solo en el elemento ''db''?
Edición 2: var_dump inicial actualizado
En realidad, usa esto:
usort($array, "cmp");
function cmp($a, $b){
return strcmp($b[''db''], $a[''db'']);
}
:)
También podría utilizar la función anónima.
// Sort in chronological order.
usort($array, function($a, $b) {
return strcmp($a[''db''], $b[''db'']);
});
Use el formato ISO ( yyyy-mm-dd
) en lugar del formato "inglés", y luego use la función ksort
para obtenerlos en el orden correcto.
No hay necesidad de eliminar los guiones, ksort
hará una comparación alfanumérica en las claves de cadena, y el formato yyyy-mm-dd
funciona perfectamente bien, ya que el orden léxico es el mismo que el orden de fecha real.
EDITAR Veo que ahora ha corregido su pregunta para mostrar que en realidad tiene una matriz de matrices y que la clave de clasificación está en las matrices secundarias. En este caso, debería usar uksort
como se recomienda en otro lugar, pero le recomendaría que uksort
su propia edición y clasificación según la fecha formateada de la base de datos, en lugar de analizar el formato legible por humanos:
function cmp($a, $b)
{
global $array;
return strcmp($array[$a][''db''], $array[$b][''db'']);
}
uksort($array, ''cmp'');
function cmp($a, $b) {
global $array;
return strcmp($array[$a][''db''], $array[$b][''db'']);
}
uksort($array, ''cmp'');
Creo que es mejor usar la función usort()
lugar de uksort()
, porque a veces no se pueden usar variables globales en absoluto y, de todos modos, usar variables globales tampoco es una buena práctica.