Pregunta

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 ordenar a cabo en el orden ascendente de las fechas (basadas en el mes, día y año). ¿Cuál es la mejor manera de hacer eso?

Al principio, los correos electrónicos se han recuperado en el formato de fecha MySQL, por lo que es posible para mí para obtener la matriz en este estado:

Array
[
    ['2008-02-28']='some text',
    ['2008-03-06']='some text'
]

Tal vez cuando su en este formato, puedo bucle a través de ellos, quitar todas las marcas (guión) '-' por lo que se dejan como integars, ordenarlos usando array_sort() y el bucle a través de ellos una vez más que los clasifique? Preferiría si había otra manera que estaría haciendo 3 bucles con este por usuario.

Gracias.

Edit: Yo también podría hacer esto:

$array[$index]=array('human'=>'28 Feb, 2009',
                   'db'=>'20080228',
                   'description'=>'Some text here');

Sin embargo, el uso de este, ¿habría alguna manera de ordenar la matriz basada en el elemento 'db' solo?

Editar 2: Actualización var_dump inicial

¿Fue útil?

Solución

Utilice el formato ISO (yyyy-mm-dd) en lugar del formato "Inglés", y luego simplemente utilizar el ksort función para conseguir que en el orden correcto.

No hay necesidad de quitar los guiones, ksort hará una comparación alfanumérica sobre las claves de cadena, y el formato yyyy-mm-dd funciona perfectamente así como el orden léxico es el mismo que el orden de la fecha real.

Editar Veo que ahora ha corregido su pregunta para demostrar que realmente ha conseguido una matriz de matrices, y que la clave de ordenación se encuentra en las sub-matrices. En este caso, se debe utilizar uksort como se recomienda en otros lugares, pero recomendaría que vaya con su propia edición y ordenación en función de la fecha DB formato, en lugar de mediante el análisis del formato legible por humanos:

function cmp($a, $b)
{
    global $array;
    return strcmp($array[$a]['db'], $array[$b]['db']);
}

uksort($array, 'cmp');

Otros consejos

En realidad, utilizar esto:

usort($array, "cmp");

function cmp($a, $b){ 
    return strcmp($b['db'], $a['db']); 
}

:)

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() en lugar de uksort(), porque a veces usted no puede utilizar variables globales en todo y de todos modos el uso de variables globales no es una buena práctica tampoco.

También es posible usar la función anónima.

// Sort in chronological order.
usort($array, function($a, $b) {
  return strcmp($a['db'], $b['db']);
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top