我想要做的是按多个键对此多维数组进行排序。我试图使用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
答案 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