按多个键对对象类创建的多维数组进行排序

时间:2011-04-07 01:22:01

标签: php arrays sorting multidimensional-array

我想要做的是按多个键对此多维数组进行排序。我试图使用array_multisort()但由于数组的类型而没有运气。

一个可以有多个键进行排序的函数(相关性,日期)最好,这样其他具有相同结构的数组也可以使用它。

这是我正在使用的$数组:

Array
(
    [0] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 32048
                    [id] => 32048
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [1] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 32002
                    [id] => 32002
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [2] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31921
                    [id] => 31921
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [3] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31868
                    [id] => 31868
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [4] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31811
                    [id] => 31811
                    [1] => 1
                    [relevancy] => 1
                )
        )
)

我尝试过这个功能(找到here),但没有运气:

$sort = array();
foreach($array as $k=>$v) {
    $sort['relevancy'][$k] = $v['relevancy'];
    $sort['date'][$k] = $v['date'];
}
# sort by event_type desc and then title asc
array_multisort($sort['relevancy'], SORT_DESC, $sort['date'], SORT_DESC, $array);

运行array_multisort函数后,我看到了:

Fatal error: Cannot use object of type DALQueryResult as array

2 个答案:

答案 0 :(得分:1)

我认为你正在使用code that can be found here。如果是这样,只需使用以下命令修改SQL查询:

ORDER BY relevancy, date

在您的情况下它不起作用,因为DALQueryResult不是数组,因此$v['relevancy']会导致错误(应该是$v->relevancy)。即使您更改了它,它也不会起作用,因为DALQueryResult是一个对象,而不是一个数组(它也没有实现ArrayAccess)。

我还建议您使用PDO而不是网上找到的随机类(当然,如果是这种情况)。 :)

答案 1 :(得分:1)

我从netcoder的答案中得到了很好的线索。要在PHP手册中对不包含数组成员的客户对象进行排序,您应该实现ArrayAccess接口的抽象函数来管理您自己的类的成员。本文可帮助您实现数组可访问类:Implementing ArrayAccess for Domain Objects