专栏首页codersamPHP的多维数组排序

PHP的多维数组排序

熟悉PHP的小伙伴都知道有很多内置函数可以对数组进行排序操作或者自定义一些排序方法(冒泡)等等。

PHP排序函数

sort() 函数用于对数组单元升序排序。
rsort() 函数用于对数组单元降序排序。
asort() 函数用于对数组单元升序排序并保持索引关系。
arsort() 函数用于对数组单元降序排序并保持索引关系。
ksort() 函数用于对数组单元按照键名升序排序。
krsort() 函数用于对数组单元按照键名降序排序。

以上函数都针对的是一维数组的排序。

二维数组排序函数

array_multisort()函数可以对多个数组或多维数组进行排序,或者根据某一维或多维对多维数组进行排序。

array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool

多维数组排序

假设有一个二维数组

$sortArr = [
['id' => 12, 'money' => 99],
['id' => 1, 'money' => 98],
['id' => 5, 'money' => 94]
];

根据id进行升序排序

// 获取数组中id值
$ids = array_column($sortArr, 'id');
// 第一个参数就是需要排序key的值,传入后相当于先对 $ids 进行排序,然后根据排序后的$ids的key重新构建需要排序的$sortArr
array_multisort($ids, SORT_ASC, $sortArr);
print_r($sortArr);

输出结果

Array
(
    [0] => Array
        (
            [id] => 1
            [money] => 98
        )

    [1] => Array
        (
            [id] => 5
            [money] => 94
        )

    [2] => Array
        (
            [id] => 12
            [money] => 99
        )

)

多维数组多个key值排序

使用上一个例子的数组,并且多增加一个排序key。

$sortArr = [
    ['id' => 12, 'money' => 99, 'sort' => 0],
    ['id' => 1, 'money' => 98, 'sort' => 0],
    ['id' => 5, 'money' => 94, 'sort' => 1]
];

先通过排序字段进行降序,再通过金额进行降序

$moneys = array_column($sortArr, 'money');
$sorts = array_column($sortArr, 'sort');
array_multisort($sorts, SORT_DESC, $moneys, SORT_DESC, $sortArr);
print_r($sortArr);

输出结果

Array
(
    [0] => Array
        (
            [id] => 5
            [money] => 94
            [sort] => 1
        )

    [1] => Array
        (
            [id] => 12
            [money] => 99
            [sort] => 0
        )

    [2] => Array
        (
            [id] => 1
            [money] => 98
            [sort] => 0
        )

)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python每天五分钟-操作MySQL(mysql.connector)

    MySQL是现今最流行的数据库之一,接下来使用Python对MySQL进行curd操作。

    用户2475223
  • docker容器相关操作

    通常启动容器时会生成一个唯一性的字符串或者可以制定该容器的名称。 可以通过下面常用命令进入容器

    用户2475223
  • 给WordPress添加HTTPS

    HTTPS是超文本传输协议,用来建立浏览器和服务器之间的通讯服务,HTTP在传输请求头报文是明文传输,这将带来很多的隐患,HTTPS因此诞生。

    用户2475223
  • Spark SQL中Not in Subquery为何低效以及如何规避

    通过上述逻辑计划和物理计划可以看出,Spark SQL在对not in subquery处理,从逻辑计划转换为物理计划时,会最终选择BroadcastNeste...

    大数据学习与分享
  • Oracle 20c 新特性:自动的区域图 - Automatic Zone Maps

    导读:Zone Maps 是一个独立的访问结构,可以为表独立建立。在表和索引扫描期间,区块图可以根据表列上的谓词来修剪表的磁盘块和分区表的潜在完整分区。区块映射...

    数据和云
  • 一次夜维SQL的性能优化

    最近单位搬家,从国家会议中心,搬往空气清新的顺义后沙峪,搬迁之前的完结上线中,碰见了一些棘手的问题,有一些值得借鉴的地方。

    bisal
  • 模仿天猫实战【SSM版】——后台开发

    我没有三颗心脏
  • delete大表时发生的一些有趣的现象

    今天周三,这两天回家比较早,早点休息了,感觉身体还是最重要的。人上年龄了感觉记忆力衰退特别明显,经常干某个事情干到一般就忘了,希望早点休息能够让我返老还...

    AsiaYe
  • MySQL replace用法简介

    今天在工作的过程中碰到一个问题,要把数据库中某个列的所有值中含有"ceshi.test.com"的字符去掉,本来可以写个脚本,把所有的值都取出再导入进行处理,但...

    MySQL轻松学
  • MySQL 大分页查询的优化之道

    大部分开发和DBA同行都对分页查询非常非常了解,看帖子翻页需要分页查询,搜索商品也需要分页查询。那么问题来了,遇到上千万或者上亿的数据量怎么快速的拉取全量,比如...

    用户2781897

扫码关注云+社区

领取腾讯云代金券