2011-05-02 41 views
0

我取出由如下返回數組數據庫中的記錄:如何對以下數組進行排序?

Array 
(
[0] => stdClass Object 
    (
     [id] => 2 
     [name] => ravi 
     [text] => hey 
     [date] => 2011-05-1 
    ) 

[1] => stdClass Object 

    (
     [id] => 3 
     [name] => shiv 
     [text] => bye 
     [date] => 2011-04-29 
    ) 

[2] => stdClass Object 

    (
     [id] => 4 
     [name] => adi 
     [text] => hello 
     [date] => 2011-04-30 
    ) 
) 

基於日期元素如何排序呢?

回答

3

你應該排序此之前,你居然把它拿來,這意味着使用「ORDER BY子句已經在你的數據庫查詢!

爲什麼?

  • ,因爲你寫更少的代碼
  • ,因爲它更快
  • 因爲它更容易重構
+0

不要忘記添加一個索引日期字段 – venimus 2011-05-02 15:28:44

+0

感謝馬庫斯,但實際上我不能子句中使用順序。 Bcoz它是在另一個foreach循環內,我只是在內部製作一組數據。 – Aditya 2011-05-04 13:10:10

1

理想情況下,你應該查詢本身內排序,使用...ORDER BY日期..

..但如果你真的想用PHP做,看看sort下手冊中的用戶的筆記,還有的例子如何(取決於如果你想保留鍵或降序排序或什麼,你可以用rsort()或ASORT()或arsort(適用))

2

您可能會發現usort()功能有用的排序像:http://docs.php.net/manual/en/function.usort.php

你可以通過在作爲第二個參數如下功能:

function cmp($a, $b) 
{ 
    if ($a->date == $b->date) { 
     return 0; 
    } 
    return ($a->date < $b->date) ? -1 : 1; 
} 
+0

你實際上可能需要這個http://www.php.net/manual/en/arrayobject.uasort.php然後使用與$ arrayObject->上述功能uasort(「CMP」);但是你也應該轉換日期前直接與< and > – venimus 2011-05-02 15:20:37

+0

比較呀至時間戳,或寫數組排序直接從DB來一個沉重的框架...:P – markus 2011-05-02 15:22:22

+0

@venimus你說得對,我錯誤地認爲他們是字符串:在這種情況下,字符串運算符(<,>)將起作用。 – 2011-05-02 15:25:13