Matriz de ordem do PHP por data?

Possível Duplicado:
PHP Classificar uma multidimensional array por elemento contendo data

Eu tenho alguns dados de XML ou JSON em uma matriz PHP que se parece com isto:

[0]= array(2) { ["title"]= string(38) "Another title" ["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200" } [1]= array(2) { ["title"]= string(38) "My title" ["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200" } 

O que eu quero fazer é encomendar os dois itens por data.

  1. É possível classificar por data, quando o valor de sorting está dentro de cada item?
  2. Preciso converter o formato da data para timestamp?

O que eu não quero fazer

Eu poderia usar a data e configurá-lo como o ID, mas isso não parece certo, porque dois itens podem ter a mesma data e então não seria exclusivo.

Você não precisa converter suas datas para timestamp antes da sorting, mas é uma boa idéia, pois isso levará mais tempo para classificar sem ela.

 $data = array( array( "title" => "Another title", "date" => "Fri, 17 Jun 2011 08:55:57 +0200" ), array( "title" => "My title", "date" => "Mon, 16 Jun 2010 06:55:57 +0200" ) ); function sortFunction( $a, $b ) { return strtotime($a["date"]) - strtotime($b["date"]); } usort($data, "sortFunction"); var_dump($data); 

Use usort :

 usort($array, function($a1, $a2) { $v1 = strtotime($a1['date']); $v2 = strtotime($a2['date']); return $v1 - $v2; // $v2 - $v1 to reverse direction }); 

Eu recomendo usar objects DateTime em vez de strings, porque você não pode comparar strings facilmente, o que é necessário para a triagem. Você também obtém vantagens adicionais para trabalhar com datas.

Depois de ter os objects DateTime, a sorting é bastante fácil:

 usort($array, function($a, $b) { return ($a['date'] < $b['date']) ? -1 : 1; }); 

Ele estava pensando em ter a data como uma chave, mas preocupado que os valores sejam escritos um acima do outro, tudo o que eu queria mostrar (talvez não tão óbvio, por isso que eu editei) é que ele ainda pode ter valores intactos, não escrito acima de tudo, não está bem ?!

 'Good morning', 'title_id_21'=>'Blue sky', 'title_id_3'=>'Summer', 'date'=>'1 May 2002' ); $data['may_2_2002']= Array( 'title_id_34'=>'Leaves', 'title_id_20'=>'Old times', 'date'=>'2 May 2002 ' ); echo '
'; print_r($data); ?>