如何使用array_multisort()对这样的多维数组进行排序?

时间:2012-09-22 02:11:56

标签: php sorting multidimensional-array

假设我们有一个像这样的数组

array(2) {
  [2012]=>
  array(2) {
    [0]=>
    array(2) {
      ["file"]=>
      string(3) "aaa"
      ["mtime"]=>
      int(1347534106)
    }
    [1]=>
    array(2) {
      ["file"]=>
      string(3) "bbb"
      ["mtime"]=>
      int(1346293592)
    }
  }
  [2011]=>
  array(2) {
    [0]=>
    array(2) {
      ["file"]=>
      string(3) "ccc"
      ["mtime"]=>
      int(1316753224)
    }
    [1]=>
    array(2) {
      ["file"]=>
      string(3) "ddd"
      ["mtime"]=>
      int(1318671936)
    }
  }
}

我希望这个数组按第一个索引(2012,2011 [,2010,...])降序排序,每个子数组(根数组的每个值)按mtime值降序排序,但我无法得到如何应用array_multisort ()这个。我可以将第一个键作为'2012'传递,然后它将作为关联数组的键传递,但是如何按mtime排序呢?

1 个答案:

答案 0 :(得分:0)

鉴于你的顶层数组是$array,你可以这样做:

krsort($array);
foreach ($array as &$arr) {
    uasort($arr, 'cmp');
}

function cmp($a, $b) {
    return $b['mtime'] - $a['mtime'];
}

var_dump($array); //to check results

应该做你想做的事。

更新:为krsort更改ksort以获得OP所需的下降年份。