专栏首页沈唁志PHP中多维数组自定义排序uasort()

PHP中多维数组自定义排序uasort()

php 内置的排序函数很多,正反各种排,常用的排序函数: sort() – 以升序对数组排序 rsort() – 以降序对数组排序 asort() – 根据值,以升序对关联数组进行排序 ksort() – 根据键,以升序对关联数组进行排序 arsort() – 根据值,以降序对关联数组进行排序 krsort() – 根据键,以降序对关联数组进行排序 基本都能满足需求了,关于这些函数的使用方法就不多啰嗦了,但是在项目的实际开发中还是会有些更加苛刻的排序需求,今天要介绍的排序函数是: uasort()。 uasort()主要是用在需要按照自定义的方法>并且保留索引关系对多维数组的排序上,有如下数组:

$sort_array = array(
    "array1" => array(
        'word'=>'test1',
        'sortnumber'=>1,
    ),
    'array3'=>array(
        'word'=>'test4',
        'sortnumber'=>4,
    ),
    'array2'=>array(
        'word'=>'test3',
        'sortnumber'=>3,
    ),
    'array5'=>array(
        'word'=>'test5',
    ),
    'array4'=>array(
        'word'=>'test2',
        'sortnumber'=>2,
    ),
);

需求是按照 sortnumber 以升序的方式排序,首先需要写一个自定义排序的规则

// 自定义排序函数
function my_sort($a,$b){
    $prev = isset($a['sortnumber']) ? $a['sortnumber'] : 0;
    $next = isset($b['sortnumber']) ? $b['sortnumber'] : 0;
    if($prev == $next)return 0;
    return ($prev<$next) ? -1 : 1;
}
echo '<pre>排序前:<br>';
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:<br>";
print_r ($sort_array);

得到的结果: 排序前:

Array
(
[array1] => Array
    (
        [word] => test1
        [sortnumber] => 1
    )
[array3] => Array
    (
        [word] => test4
        [sortnumber] => 4
    )
[array2] => Array
    (
        [word] => test3
        [sortnumber] => 3
    )
[array5] => Array
    (
        [word] => test5
    )
[array4] => Array
    (
        [word] => test2
        [sortnumber] => 2
    )
)

排序后:

Array
(
[array5] => Array
    (
        [word] => test5
    )
[array1] => Array
    (
        [word] => test1
        [sortnumber] => 1
    )
[array4] => Array
    (
        [word] => test2
        [sortnumber] => 2
    )
[array2] => Array
    (
        [word] => test3
        [sortnumber] => 3
    )
[array3] => Array
    (
        [word] => test4
        [sortnumber] => 4
    )
)

最后需要提醒的是:自定义的函数要使用 isset 检测下需要排序的字段是否存在如不存在赋个默认的 0,不然会有报错提示。

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP中多维数组自定义排序uasort()

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用PHP实现数组的笛卡尔积来处理商品规格

    在优化商城项目的时候,选择将商品的内容、规格、库存和价格分三个表来写。将多个规格的id合并存在一个字段中,按照从小到大的顺序来排列,使用逗号分隔

    沈唁
  • 如何提高PHP书写效率?提高PHP书写效率的几个示例

    沈唁
  • 如何将WordPress远程附件存储到腾讯云对象存储COS上

    WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站,也可以把 WordPress...

    沈唁
  • Runtime类(重点)

    在每一个JVM进程之中,都会存在一个运行时的操作类的对象,而这对象所属的类型就是Runtime类。打开这个类的文档可以发现,在这个类之中并没有构造方法定义,可是...

    葆宁
  • 003-二维数组的查找

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个...

    单车变摩托
  • Sublime Text 快速格式化

    HTML/CSS/JS 格式化插件:HTML/CSS/JS Prettify 安装过程: 在Sublime Text中,按下Ctrl+Shift+...

    似水的流年
  • Sublime Text 快速格式化

    举例: 打开一个压缩的jQuery.min.js文件,按下Ctrl+Shift+H

    似水的流年
  • java选择排序(最精简代码)

    public class SelectionSort { public void selectionSort(int[] array) { int tem...

    闵开慧
  • 系统设计与分析 作业5

    相同点:两者都是抽象概念,都将业务的各概念,关系等抽象化,并用图表示出来,将需求抽象为可视化的概念关系。 不同点:领域模型不需要考虑太多的实现细节,更注重的是...

    平凡的学生族
  • 国外大学自办星际赛事 鼓励学生自制AI来对战

    比起为了考试念书,电子游戏对学生的吸引力总是更强大,Inverse报道指出,中欧两所大学的电脑科学家找到方法利用这点,让玩《星际争霸:怒火燎原》(Starcra...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券