前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PHP中多维数组自定义排序uasort()

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

作者头像
沈唁
发布于 2018-05-24 08:03:16
发布于 2018-05-24 08:03:16
2.5K00
代码可运行
举报
文章被收录于专栏:沈唁志沈唁志
运行总次数:0
代码可运行

php 内置的排序函数很多,正反各种排,常用的排序函数:

sort() – 以升序对数组排序

rsort() – 以降序对数组排序

asort() – 根据值,以升序对关联数组进行排序

ksort() – 根据键,以升序对关联数组进行排序

arsort() – 根据值,以降序对关联数组进行排序

krsort() – 根据键,以降序对关联数组进行排序

基本都能满足需求了,关于这些函数的使用方法就不多啰嗦了,但是在项目的实际开发中还是会有些更加苛刻的排序需求,今天要介绍的排序函数是: uasort()。

uasort()主要是用在需要按照自定义的方法>并且保留索引关系对多维数组的排序上,有如下数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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 以升序的方式排序,首先需要写一个自定义排序的规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义排序函数
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);

得到的结果:

排序前:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
    )
)

排序后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP数组
函数默认是进行升序排序,同时函数也接受第二个参数指定排序方法:SORT_ASC(升序)、SORT_DESC(降序)
Mirror王宇阳
2020/11/10
6.9K0
Array数组函数(三)
array_keys — 返回数组中所有的键名 array_values — 返回数组中所有的值 array_key_exists — 检查给定的键名或索引是否存在于数组中 <?php$phpha=
wangxl
2018/03/07
9950
java中数组的定义与使用
Java中的数组跟c语言的数组几乎不一样,我们要区分对待。在之后你就能理解到我为什么说这句话了。
E绵绵
2024/04/08
1650
java中数组的定义与使用
Python NumPy自定义排序算法实现
排序是数据处理和分析中的基本操作。虽然 NumPy 提供了高效的内置排序函数(如 numpy.sort 和 numpy.argsort),但有时需要实现自定义的排序逻辑,以满足特定需求,例如对数组中的特定列、组合条件或自定义顺序进行排序。
sergiojune
2024/12/27
870
Python NumPy自定义排序算法实现
shell|数组,忘记写小括号到再次认识数组
TARGETS=`ps -ef|grep my.py| grep -v "grep"|awk '{print $2}'`
heidsoft
2019/05/31
9570
PHP 关于数组排序的函数
php的数组排序函数有很多。有按键排序,有按值排序。有升序,有降序。有的排序后改变原数组索引,有的不改变。
写PHP的老王
2019/08/12
1.6K0
PHP 关于数组排序的函数
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】
数组基本操作可以归纳为增、删、改、查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会
HelloWorldZ
2024/03/20
2070
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】
PHP 中操作数组的知识点
数组的赋值: PHP中的数组既可以做数组,也可以做键值对字典,且不存在限制,非常灵活.
王瑞MVP
2022/12/28
2.4K0
Java基础(十八):java比较器、系统相关类、数学相关类
冬天vs不冷
2025/01/21
800
Java基础(十八):java比较器、系统相关类、数学相关类
PHP 数组使用之道
这个教程我将通过一些实用的实例和最佳实践的方式列举出 PHP 中常用的数组函数。每个 PHP 工程师都应该掌握它们的使用方法,以及如何通过组合使用来编写更精简且易读的代码。
柳公子
2018/09/17
1.1K0
Python应用——自定义排序全套方案
今天的这篇文章和大家聊聊Python当中的排序,和很多高级语言一样,Python封装了成熟的排序函数。我们只需要调用内部的sort函数,就可以完成排序。但是实际场景当中,排序的应用往往比较复杂,比如对象类型,当中有多个字段,我们希望按照指定字段排序,或者是希望按照多关键字排序,这个时候就不能简单的函数调用来解决了。
TechFlow-承志
2020/03/05
9460
深入理解 Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。几乎所有程序设计语言都支持数组。
静默虚空
2019/12/20
4390
深入理解 Java 数组
《JavaSE》---9.<基础语法(java数组的3种初始化&常规使用)>
1.数组是一段连续的内存空间,所以支持随机访问,通过下标访问快速访问数组中任意位置的元素
用户11288958
2024/09/24
1540
《JavaSE》---9.<基础语法(java数组的3种初始化&常规使用)>
代码审计|PHP代码执行函数进阶版实力上线了!
本篇涉及函数:call_user_func()、call_user_func_array(),array_filter,usort,uasort() 0x01 call_user_func函数 源自官方的解释: call_user_func (PHP 4, PHP 5, PHP 7) call_user_func — 把第一个参数作为回调函数调用, 后续参数作为回调函数的参数传入。 说明: mixed call_user_func ( callable $callback [, mixed $para
漏斗社区
2018/03/28
1.4K0
代码审计|PHP代码执行函数进阶版实力上线了!
Java基础入门笔记04——方法调用,方法重载,命令行参数,可变参数,多维数组,Arrays类,冒泡排序,矩阵的压缩存储
一般情况:写几个名字一样的方法(方法名必须相同),让它们的参数类型不同(一定不同),参数个数可以不同,参数顺序可以不同,方法体也可以不同。
全栈程序员站长
2022/09/21
7160
Java基础入门笔记04——方法调用,方法重载,命令行参数,可变参数,多维数组,Arrays类,冒泡排序,矩阵的压缩存储
IOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS开发中一个重要的框架Foundation,今天的主要内容有: 1. Foundation概述 2. 常用结构体 3. 日期 4. 字符串 5. 数组 6. 字典 7. 装箱和拆箱 8. 反射 9. 拷贝 10. 文件操作
用户1941540
2018/06/20
7790
table自定义排序
实际上表格的排序就是把要排序的那列(或行),的值存在一个数组中,然后对数组用比较函数进行排序,然后再对表格内容进行替换. 思想:考虑代码的简单易用及可重复; 现在举例说明,以列排序为例; 1)表格的规范: 因为排序是在同类型之间进行的,比如:字符串,数字,日期;然而,用来触发排序事件的表头和该列数据的类型可能不同,所以在生成表格的时候最好将表头和下面的内容分开.以免在取值的时候还要对表头进行排除.所以可以采取下面的方法:<thead></thead><tbody></tbody>表头放在thead里面,数据放在tbody里面(thead,tbody,tfoot 这三个是表格自身就拥有的,不是自己创造的;)这样就更直观了.当点击thead里面tr里的td后,触发排序事件,将tbody里的某列进行排序. 2)统一排序函数. 为了代码的简易,整个表格排序用一个函数,不同的列排序只是传递的参数不同;比如,第一列传1, 第二列则传2;但因为每列的数据类型可能不同,所以要进行判断.而且要将数据转换成可比较的类型.甚至可以通过传的参数不同获得不同的比较函数; 3)将要排序的列获取到,放在数组中; 为了程序的简单,可以直接把tr放在数组中,然后在比较函数中进行取值.将tr放在数组中时不会从表格中删除tr元素.因为仅仅存储了指针,并不是实际的元素. 4)排序 对数组里数据的类型进行判断,然后根据类型,进行转换,转成可转换的类型;然后用自己写的比较函数进行比较;得到排好序的数组; 5)按已排序的数组生成新的表格; 6)创建文档碎片,将新表格绑定在碎片一; 7)将文档碎片绑定在tbody上,从而实现了在用户看来刷新了表格的目的; 举个详细的例子: 一个2*3的表格;一列里面放的是名字,一列里面是图片;直接对图片肯定不能排序,所以要在图片的td里面自定义一个值.如:加一个value属性;
西门呀在吹雪
2020/11/09
9960
扑克牌的顺子
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们定义为0,这样就能和其他扑克牌区分开来了。 接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的0可以补
猿人谷
2018/01/17
6970
数组排序的实现
利用Collections.reverseOrder()方法:倒叙排列,数组倒置。
泰斗贤若如
2019/06/19
6330
《JavaSE-第六章》之容器数组
本章大家介绍一个存储相同数据类型的容器----数组,以及便于我们对数组操作的工具类Arrays类的使用。
用户10517932
2023/10/07
2170
《JavaSE-第六章》之容器数组
相关推荐
PHP数组
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文