php之二维数组排序问题
作者:xie_rui_xiang 发布时间:2023-07-15 06:44:42
标签:php,二维数组,排序
php二维数组排序
测试数据
$arr = [
'a' => ['a' => 11, 'b' => 12, 'c' => 13],
'b' => ['a' => 10, 'b' => 13, 'c' => 12],
'c' => ['a' => 12, 'b' => 11, 'c' => 10],
];
通过usort排序
# usort 排序会导致二维数组的key改变(key a,b,c 变成 0,1,2 这种)
# 如果不在意key的改变可以用这种
# $arr 是引用
usort($arr, function ($current, $next) {
# 正序排
return $current['a'] > $next['a'];
});
通过array_multisort排序
$arr = [
'a' => ['a' => 11, 'b' => 12, 'c' => 13],
'b' => ['a' => 10, 'b' => 13, 'c' => 12],
'c' => ['a' => 12, 'b' => 11, 'c' => 10],
];
# 以二维数组的a作为比较值
$key = array_column(array_values($arr), 'a');
# 第一个参数需要提供二维数组排序依据
# 第二个排序方式 SORT_ASC:正序 SORT_DESC:倒序
# 第三个参数 要排序的二维数组,改动直接操作在该数组上
# 排序能保证key不改变
array_multisort($key, SORT_ASC, $arr);
php二维数组排序算法函数
<?php
// 二维数组排序算法函数,能够具有通用性,可以调用php内置函数。
function array_sort(&$arr, $order = []){
$result = [];
if (empty($arr)) {
return $result;
}
uasort($arr, function ($a, $b) use ($order) {
foreach ($order as $key => $sort) {
array_shift($order);
if ($a[$key] == $b[$key]) {
continue;
}
if ($sort === 'DESC') {
return ($a[$key] > $b[$key]) ? -1 : 1;
} else {
return ($a[$key] > $b[$key]) ? 1 : -1;
}
}
return 0;
});
foreach ($arr as $value) {
$result[] = $value;
}
return $arr = $result;
}
// 测试
$ps = array(
array('id' => 1, 'name' => 'zhangcan', 'age' => 13),
array('id' => 2, 'name' => 'lisi', 'age' => 16),
array('id' => 3, 'name' => 'wangwu', 'age' => 17),
array('id' => 4, 'name' => 'wangwu', 'age' => 18),
);
// $ret = array_sort($person, ['name' => 'ASC']);
$ret = array_sort($ps, ['name'=>'ASC', 'age'=>'DESC']);
print_r($ret);
来源:https://xieruixiang.blog.csdn.net/article/details/124452449
0
投稿
猜你喜欢
- 在Python的标准库中,functools库中有很多对方法有操作的封装功能,partial Objects就是其中之一,他可以实现对方法参
- 我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pi
- 字典与json字符串区别# python 中的字典格式,是dict类型{'a': 'sd'}如果声明a =
- 本文实例讲述了php将12小时制转换成24小时制的方法。分享给大家供大家参考。具体如下:php将12小时制转换成24小时制,输入格式为:02
- CSS换肤技术一直是一个比较热门的话题,通过给HTML文档不同的CSS样式应用,实现完全不同或风格迥异的页面效果。这样的技术一直为大家所津津
- 一般是有左侧菜单后,然后要在页面上部分添加历史标签菜单需求。借鉴其他项目,以及网上功能加以组合调整实现按照标签实现方式步骤来(大致思路):1
- 在开发过程中,很多时候我们有分割字符串的需求,即把一个字符串按照某种分割符进行切割。在 Go 语言中,分割字符串我们可以分为几种情况,分别为
- 1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。 他
- WxPython界面用pubsub实现多线程控制用WxPython做界面时, 如果数据操作时间比较长,会使 WxPython 界面处于假死状
- 一、简介 多线程编程技术可以实现代码并行性,优化处理能力,同时功能的
- Sql Server中清空所有数据表中的记录清空所有数据表中的记录:exec sp_msforeachtable @Comman
- 本文实例讲述了JS+CSS实现仿支付宝菜单选中效果代码。分享给大家供大家参考。具体如下:这是一个漂亮的JS+CSS仿支付宝菜单,总体风格和形
- 1.基本构架:mport PIL.Image 相关模块img=Image.open(img_name) 打开图片img.save(save_
- JS获取多选框checkbox被选中的个数。var checkbox = document.getElementsByName("
- 一、人脸图像特征提取方法https://www.jb51.net/article/219446.htm二、对笑脸数据集genki4k进行训练
- 测试过程如下:create table sales as select * f
- 处理excel表格的时候经常遇到合并单元格的情况,使用xlrd中的merged_cells的方法可以获取当前文档中的所有合并单元格的位置信息
- CSS写法:overflow-y:visible本代码适用平台:IE6,IE7演示:<textarea style="wid
- Unet是一个最近比较火的网络结构。它的理论已经有很多大佬在讨论了。本文主要从实际操作的层面,讲解pytorch从头开始搭建UNet++的过
- 论坛有人问起如何获取读取CSS属性值,就写了下面这段兼容各浏览器的获取HTML元素的css属性值函数:function getSt