Ordenar Multi Array en PHP

¿Alguien tiene una idea de cómo puedo ordenar esta matriz por clave (fecha) en PHP?

Array ( [2011-02-16] => Array ( [date] => 2011-02-16 [num] => 2 ) [2011-02-11] => Array ( [date] => 2011-02-11 [num] => 0 ) [2011-02-17] => Array ( [date] => 2011-02-17 [num] => 0 ) [2011-02-18] => Array ( [date] => 2011-02-18 [num] => 0 ) ) 

Use la función uasort , que es una ordenación personalizable por el usuario. Me gusta esto:

 function cmp($a, $b) { if ($a['date'] == $b['date']) { return 0; } return ($a['date'] < $b['date']) ? -1 : 1; } uasort($your_array, "cmp"); 

Cosa segura. Ayer respondí esta publicación exacta también.

Clasificando 2 matrices para obtener el más alto en uno y el más bajo en otro

En tu caso, será algo así como …

 $myArray= subval_sort($myArray,'date'); function subval_sort($a,$subkey) { foreach($a as $k=>$v) { $b[$k] = strtolower($v[$subkey]); } asort($b); foreach($b as $key=>$val){ $c[] = $a[$key]; } return $c; } 

EDITAR

La respuesta de shamittomar es mejor 🙂

Esto debería ayudarlo a repasar los aspectos básicos de la ordenación de arreglos en PHP

http://www.the-art-of-web.com/php/sortarray/

Sin embargo, algo como esto resolvería su problema:

 usort($array, "cmp"); function cmp($a, $b){ return strcmp($b['date'], $a['date']); 

Bueno, como lo haría la clasificación en la clave, ksort () funcionaría para usted.

Pero si realmente desea ordenar el elemento de fecha, usaría uasort () con una función de ordenación como esta

  function compare($a, $b) { if ($a['date']==$b['date']) return 0; return ($a['date']>$b['date'])?1:-1; } uasort($myarray, 'compare'); 

Dado que su matriz ya tiene la fecha en las teclas, ¿por qué no simplemente usar ksort ? La comparación de cadenas debería funcionar bien ya que está utilizando el formato AAAA-MM-dd.

http://www.php.net/manual/en/function.array-multisort.php

¿El ejemplo # 3 se adaptaría a sus necesidades?

Lo que quieres es UASORT.

http://us3.php.net/manual/en/function.uasort.php

la función sería como:

 function cmp($a, $b) { $d1 = strtotime($a['date']); $d2 = strtotime($b['date']); if ($d1 == $d2) { return 0; } return ($d1 < $d2) ? -1 : 1; } 

Una mejor respuesta sería usar uksort que se usa para ordenar claves con una función definida por el usuario (considerando que estas fechas no siempre se pueden comparar y no se pueden ordenar con ksort sin aplicar primero strtotime a las teclas):

 function sort_by_date_keys($date_key1, $date_key2) { // reverse the order of the $date_keys for "oldest to newest" return strtotime($date_key2) - strtotime($date_key1); ); uksort($array, 'sort_by_date_keys'); 

Este método está más definido que uasort ya que se adaptó a las claves.

Ejemplo:

 $array = array( '1/1/12' => 'foo1', '1/1/13' => 'foo2' ); uksort($array, 'sort_by_date_keys'); // output $array = array( '1/1/13' => 'foo2', '1/1/12' => 'foo1' );