2011-05-02 12 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