php - 按 2 列对多维数组进行排序

标签 php arrays sorting multidimensional-array

我想按二维数组的列之一对它进行排序...例如:

$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),
);

我想按付款 (DESC) 和时间 (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

最佳答案

您可以使用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
        )

)

关于php - 按 2 列对多维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10315753/

相关文章:

java - 在Java中模拟具有多个服务器的单个队列

java - 使用原始数组在 Java 中创建排行榜

jquery - 重命名 Javascript 数组中的重复项

c++ - 我的合并排序算法没有得到正确答案

php - PHP session 变量处理不当?

java - 与带有密码保护 key 的 PHP openssl_open 等效的 Java 是什么?

java - 完成xslt新手。如何在xslt 1.0版中合并这2个xml源。应用分组和排序?

java - 如何获得HashMap中的3个最高值?

php简历文件导入

php - Google 操作生成器 - 如何从 webhook 请求中读取并避免空响应