在PHP中用2个不同的值对多维数组进行排序

时间:2012-01-07 01:00:21

标签: php sorting multidimensional-array

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

1 个答案:

答案 0 :(得分: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");