PHP порядок массива по дате?

Возможный дубликат:
PHP Сортировка многомерного массива по элементу, содержащему дату

У меня есть некоторые данные из XML или JSON в массиве PHP, который выглядит так:

[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" } 

То, что я хочу сделать, это заказать два элемента по дате.

  1. Можно ли сортировать по дате, когда значение сортировки находится внутри каждого элемента?
  2. Нужно ли преобразовать формат даты в метку времени?

Что я не хочу делать

Я мог бы использовать дату и установить ее как идентификатор, но это не так, потому что два элемента могут иметь одну и ту же дату, а затем они не будут уникальными.

Вам не нужно преобразовывать свои даты в timestamp перед сортировкой, но это хорошая идея, хотя для этого потребуется больше времени, чтобы сортировать без нее.

 $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); 

Использовать usort :

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

Я рекомендую использовать объекты DateTime вместо строк, потому что вы не можете легко сравнивать строки, необходимые для сортировки. Вы также получаете дополнительные преимущества для работы с датами.

Когда у вас есть объекты DateTime, сортировка довольно проста:

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

Он рассматривал дату как ключ, но беспокоился о том, что ценности будут записаны один над другим, все, что я хотел показать (может быть, не так очевидно, почему я редактирую), так это то, что он все еще может иметь ценности, а не написанные выше других, разве это не нормально?

 <?php $data['may_1_2002']= Array( 'title_id_32'=>'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 '<pre>'; print_r($data); ?>