2011-06-19 138 views
21

可能重複:
PHP Sort a multidimensional array by element containing date按日期排序PHP數組?

我從一個PHP數組XML或JSON的一些數據,看起來像這樣:

[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. 我是否需要將日期格式轉換爲時間戳?

我不想做

我可以使用日期,並將其設置爲ID,但不覺得不對勁,因爲兩個項目可以有相同的日期,然後它會不是唯一的。

+0

參加這個帖子看看第一個答案:[鏈接](http://stackoverflow.com/questions/597863/how-to-sort-a-date-array-in-php) – Sander

回答

65

你不需要排序前將日期轉換爲時間戳,但它是一個好主意,但因爲這將需要更多的時間來排序沒有它。

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

非常直接的,乾淨的答案。謝謝。 – Kray

+0

乾淨的答案,但如果兩個日期相等,這將失去價值 –

+0

這是不正確的,爲什麼呢?他們會一個接一個。 –

26

使用usort

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

這個版本呢? 'usort($ sortArray,函數($一個,$ B){ 返回的strcmp($一個[ 'article_created_date'],$ B [ 'article_created_date']); });' – DrMed

16

我推薦使用DateTime對象而不是字符串,因爲您無法輕鬆比較字符串,這是排序所需的。使用日期還可以獲得更多優勢。

一旦你的datetime對象,分類是很容易的:

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

他正在考慮具有日期作爲重點,但擔心值將寫入一個上述以外,所有我想證明(也許不那麼明顯,那爲什麼我編輯)是他仍然可以保持完整的值,而不是寫在上面,這不是好嗎?!

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