具有多维对象数组的array_multisort

时间:2013-04-24 18:21:07

标签: php object multidimensional-array

我想对一个多维数组进行排序,其中每个数组都是一个对象。

的例子

http://php.net/manual/en/function.array-multisort.php

表示需要创建要排序的列数组

foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

但是如果我以这种格式格式化我的请求,则会出现followiwng错误:

  

捕获致命错误:类stdClass的对象无法转换为字符串

代码如下,其中键/值对的姓氏为key last_name:

foreach ($mw_users as $key => $value) {
$last_name[$key]  = $row['last_name'];
}

array_multisort($last_name, SORT_ASC, $mw_users);

2 个答案:

答案 0 :(得分:1)

为要排序的每列定义一个数组,并使用对象引用语法添加列值:

// Obtain a list of columns
foreach ($mw_users as $mw_user) {
    $lastnames[]  = $mw_user->last_name;
    $firstnames[] = $mw_user->first_name;
}

// Sort the data with volume descending, edition ascending
// Add $mw_users as the last parameter, to sort by the common key
array_multisort($lastnames, SORT_ASC, $firstnames, SORT_ASC, $mw_users);

与排序数据库结果类似:http://php.net/...array-multisort.php...

答案 1 :(得分:0)

在PHP中排序对象数组时,有助于覆盖__tostring()魔术方法。这样,各种排序方法将对象视为可比较的东西。例如,员工对象可以输出该员工的姓名或员工ID。