【问题标题】:Sorting a multidimensional array by 2 different values in PHP在PHP中按2个不同的值对多维数组进行排序
【发布时间】:2012-01-07 01:00:21
【问题描述】:

我有一个数组(下)。我想按 2 个不同的值对其进行排序,首先是“覆盖”中的值,它将是整数 1-9。然后,如果为 0 或 null,我希望数组按“total_rank”排序。因此,如果 override 有 3 个不同的值 213,然后总排名为 1.4、1.6、1.2,则数组将被重新组织为第一个具有 override - 1、2、3 的行。下一行将是 total_rank 为的行1.2,然后是 1.4,1.6。

对不起,如果我没有像我想的那样清楚地解释这一点。我尝试使用 arsort(),但无法让它做我想做的事(我是 PHP 新手)。

任何帮助将不胜感激,多维数组的一行示例如下:

 array(16) {
  ["id"]=>
  string(1) "3"
 ["title"]=>
  string(5) "test2"
  ["description"]=>
  string(5) "test2"
  ["requester"]=>
  string(1) "1"
  ["project_id"]=>
  string(1) "2"
  ["client_ranking"]=>
  string(1) "5"
  ["tech_ranking"]=>
  string(1) "5"
  ["time_ranking"]=>
  string(1) "5"
  ["pm_ranking"]=>
  string(1) "5"
  ["total_rank"]=>
  string(3) "1.8"
  ["datecreated"]=>
  string(19) "2012-01-05 11:58:13"
  ["dateclosed"]=>
  string(19) "2012-01-05 11:58:13"
  ["ispending"]=>
  string(1) "1"
  ["isclosed"]=>
  string(1) "0"
  ["override"]=>
  string(1) "5"
  ["developer"]=>
  string(1) "1"

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:

如果我理解正确,您可以尝试使用usort

function cmp($a, $b)
{
    // if 'override' is same we compare 'total_rank'
    if ($a['override'] == $b['override']) {
        if ($a['total_rank'] == $b['total_rank'])
            return 0;
        return ($a['total_rank'] < $b['total_rank']) ? -1 : 1;
    }
    // else compare 'override'
    return ($a['override'] < $b['override']) ? -1 : 1;
}
usort($array, "cmp");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多