PHP:根据值列表排序多维数组

Dan*_*e B 5 php arrays

给定这个数组:

Array
(
    [0] => Array
        (
            [status] => closed
            [userModifiedAt] => 2015-12-09T11:47:46Z
        )

    [1] => Array
        (
            [status] => active
            [userModifiedAt] => 2016-02-08T16:43:26Z
        )

    [2] => Array
        (
            [status] => closed
            [userModifiedAt] => 2016-03-31T03:47:19Z
        )

    [3] => Array
        (
            [status] => pending
            [userModifiedAt] => 2015-12-08T14:09:58Z
        )
Run Code Online (Sandbox Code Playgroud)

我想通过[status]订购此订单: - 待处理 - 活动 - 已关闭

对于每个状态,按[userModifiedAt]排序.

我正在使用此代码:

usort($array, function($a,$b){ return strcmp($a['status'], $b['status']);} );
Run Code Online (Sandbox Code Playgroud)

但它按字母顺序排列,因此状态按以下顺序排序: - 活动 - 关闭 - 待定

如何根据预定义的订单列表订购数组?

Sou*_*ose 7

这将是一个伎俩 -

## A array with the orders to be considered
$order = array('active' => 1, 'closed' => 2, 'pending' => 3);

usort($array, function($a, $b) use($order) { // Use the order array to compare
    return $order[$a[status]] - $order[$b[status]];
});

var_dump($array);
Run Code Online (Sandbox Code Playgroud)

产量

array(4) {
  [0]=>
  array(2) {
    ["status"]=>
    string(6) "active"
    ["userModifiedAt"]=>
    string(20) "2016-02-08T16:43:26Z"
  }
  [1]=>
  array(2) {
    ["status"]=>
    string(6) "closed"
    ["userModifiedAt"]=>
    string(20) "2015-12-09T11:47:46Z"
  }
  [2]=>
  array(2) {
    ["status"]=>
    string(6) "closed"
    ["userModifiedAt"]=>
    string(20) "2016-03-31T03:47:19Z"
  }
  [3]=>
  array(2) {
    ["status"]=>
    string(7) "pending"
    ["userModifiedAt"]=>
    string(20) "2015-12-08T14:09:58Z"
  }
}
Run Code Online (Sandbox Code Playgroud)

array如果您想要不同的订单,请更改订单.具有最低值的键将首先出现在array.如果你想先关闭,那么在$order数组中提供最低值.

DEMO

  • 好的,你也可以做魔术吗?:)不知道! (3认同)