2

我想按其中一列对二维数组进行排序...例如:

$a = array(
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000),
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000),
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000),
);

我想按payment( DESC) 和time( ASC) 对其进行排序。所以排序后的数组应该是这样的:

$a = array(
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000),
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000),
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000),
);

怎么做?谢谢,


我找到了解决方案:

    foreach ($a as $key => $row) {
        $payment[$key]  = $row['payment'];
        $time[$key] = $row['time'];
    }

    array_multisort($payment, SORT_DESC, $time, SORT_ASC, $a);

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

4

2 回答 2

2

你可以使用usort

$arr = array(
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000),
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000),
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000),
);

function mySort($a,$b) {
    if ($a['payment'] == $b['payment']) {
        return $a['time'] - $b['time'];
    } else {
        return $b['payment'] - $a['payment'];
    }
}
usort($arr, 'mySort');
print_r($arr);

输出:

Array
(
    [0] => Array
        (
            [name] => u3
            [payment] => 2000
            [time] => 3000
        )

    [1] => Array
        (
            [name] => u2
            [payment] => 2000
            [time] => 5000
        )

    [2] => Array
        (
            [name] => u4
            [payment] => 1000
            [time] => 5000
        )

)
于 2012-04-25T13:02:31.813 回答
0

是的 usort 是这里的答案。在我看来,PHP array_multisort 的行为很奇怪,它强制您将自然格式化的表数据分解为单独的数组。

这是用于表格数据格式的多维数组的多列排序的基本解决方案。

http://pastebin.com/9vCy1jxH

于 2013-10-16T15:43:47.263 回答