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 条评论
登录 后参与评论

相关文章

来自专栏aCloudDeveloper

C++Primer笔记之复制控制

复制控制这一节需要注意的地方不多,主要有以下几点: 1、定义自己的复制构造函数 什么时候需要定义自己的复制构造函数,而不用系统提供的,主要遵循以下的经验说明: ...

1926
来自专栏程序员互动联盟

【编程基础】Java 如何完成数据类型转换

在写程序的时候经常遇到数据的运算,在数据运算中又经常遇到不同类型的数据之间进行转换,那么数据类型之间的转换规则是什么样的呢? Java数据类型转换分为两种: ...

2854
来自专栏赵俊的Java专栏

由一道 Java finally 执行顺序的题引发的思考

2344
来自专栏测试开发架构之路

C++之类和对象的特性

简介:C++并不是一个纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型的语言。 凡是以类对象为基本构成单位的程序称为基于对象的程序,再加上抽象、封装、...

3486
来自专栏猿人谷

memcpy的函数

网新恒天2014校园招聘笔试编程题 已知memcpy的函数为: void* memcpy(void *dest , const void* src , s...

2178
来自专栏小狼的世界

Python3.6学习笔记(三)

面向对象编程 Object Oriented Programming 简称 OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作...

872
来自专栏企鹅号快讯

JAVA核心技术学习笔记

掌握Java核心技术是学习和掌握好Java技术的关键,下边分17个点对这些Java核心技术进行讲解。 >>>1.Java中没有多继承,而是用接口来代替多继承 >...

1965
来自专栏我和PYTHON有个约会

22. 企业级开发基础3:类和对象

本节内容开始,讲解企业级项目开发基础部分:面向对象;主要从对象的抽象、对象的创建,对象中特殊的方法,面向对象的封装、继承、多态等各个方面来进行讲解。

693
来自专栏老九学堂

【干货】Java字符串之10大热点问题!

其实作为Java初学者,字符串是一个必须迈过的坎,所以老九君为了大家能够更好的掌握字符串这个知识点,以及深入的了解一些原理,搜罗总结了以下10条Java字符串的...

2854
来自专栏Python小屋

Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)

'''程序功能: 给定一个含有多个整数的列表,将这些整数任意组合和连接, 返回能得到的最小值。 代码思路: 将这些整数变为相同长度(按最...

3546

扫码关注云+社区

领取腾讯云代金券