php数组排序后保留键名,详解PHP 二维数组排序保持键名不变
对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例:
$data = array(
1001 => array(
'age' => 22,
'name' => '鸠摩智'
),
1007 => array(
'age' => 21,
'name' => '慕容复'
),
1004 => array(
'age' => 27,
'name' => '乔帮主'
)
);
//根据字段age对数组$data进行升序排列
$ages = array_column($data, 'age');
array_multisort($ages, SORT_ASC, $data);
print_r($data);
细心的朋友会看到,键名重置了,键名从0开始,显然这可能不是我们想要的结果,那如何保持键名不变?
我们再看个示例:
$data = array(
1001 => array(
'age' => 22,
'name' => '鸠摩智'
),
1007 => array(
'age' => 21,
'name' => '慕容复'
),
1004 => array(
'age' => 27,
'name' => '乔帮主'
)
);
//根据字段age对数组$data进行降序排列
$data = arraySort($data, "age", "desc" );
print_r($data);
/**
* @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
* @param array $arr 将要排序的数组
* @param string $keys 指定排序的key
* @param string $type 排序类型 asc | desc
* @return array
*/
function arraySort($arr, $keys, $type = 'asc')
{
$keysvalue = $new_array = array();
foreach ($arr as $k => $v) {
$keysvalue[$k] = $v[$keys];
}
if ($type == 'asc') {
natsort($keysvalue);
}
if ($type == 'desc') {
natsort($keysvalue);
$keysvalue = array_reverse($keysvalue, TRUE); // 将原数组中的元素顺序翻转,如果第二个参数指定为 true,则元素的键名保持不变
}
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
这里我们也可以精简下arraySort函数,处理结果相同:
/**
* @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
* @param array $arr 将要排序的数组
* @param string $keys 指定排序的key
* @param string $type 排序类型 asc | desc
* @return array
*/
function arraySort($arr, $keys, $type = 'asc')
{
$keysvalue = $new_array = array();
foreach ($arr as $k => $v) {
$keysvalue[$k] = $v[$keys];
}
$type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
从上面的结果我们看到:
键名保持了不变,实现的原理很简单,先取出键名,然后对键名排序,再根据对应的键名赋值组成新数组返回。
大家可以看到,这里我们主要用到了php的几个核心的排序函数
asort() 对关联数组按照键值进行升序排序。
arsort()对关联数组按照键值进行降序排序。
natsort() 实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短的优先。数组的索引与单元值保持关联,
注意:在自然排序算法中,数字 2 小于 数字 10。在计算机排序算法中,10 小于 2,因为 "10" 中的第一个数字小于 2。
以上所述是小编给大家介绍的如何保持PHP 二维数组排序键名不变详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
php数组排序后保留键名,详解PHP 二维数组排序保持键名不变相关推荐
- AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练)
AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练) 1. 大家碰到的很多都是二维码识别不出来的情况. 原因:周围环境的光太强或太暗,遮挡了二维码的信息,摄像头识别不到全部的信 ...
- python三维图切片提取_详解Python二维数组与三维数组切片的方法
如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...
- Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值
为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...
- python二维数组切片规则_详解Python二维数组与三维数组切片的方法
如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...
- 【详解】二维数组的长度问题。int[][] arr = new arr[3][4];arr.length;arr[0].length;
二维数组可以看成一个一维数组.二维数组的行可以看成一维数组的元素,列可以看成具体其中的元素. 1.arr.length代表的是二维数组的行 2.arr[0].length是二维数组的列. 具体看下面测 ...
- 【机器学习】—— K-means聚类算法原理详解 以及 二维、三维数据的K-means聚类Python实现
文章目录 一.K-Means聚类算法原理过程 1.1 K-means聚类的一些细节 1.1.1 样本x(i)x^{(i)}x(i)与中心点μkμ_kμk距离的衡量 1.1.2 K-means聚类算法 ...
- php 二维排序函数,PHP二维数组排序函数
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: functi ...
- c语言sort函数排序二维数组,js 二维数组排序sort()函数
一.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; arr.sort(function(x, y){ return x[0] – y[0]; }) ...
- 外键约束详解及术语释疑
外键约束详解及术语释疑 先要理清几个概念: 1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作 ...
最新文章
- htc820+android+l,首款高通64位八核 HTC Desire 820评测
- 基于matlab的对流层散射信道特性仿真,对流层散射信道建模和FPGA实现
- C++ protobuf 不仅仅是序列化……
- MVC视图之间调用方法总结
- Spark Streaming揭秘 Day16 数据清理机制
- Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制
- go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数
- [Leetcode][第75题][JAVA][颜色分类][双(三)指针][计数排序]
- 你的DNA都会玩摇滚了,你却还是个音痴
- IPv4 和 IPv6 有什么区别
- 字符集不同导致的ORA-00972
- Centos 6.9 编译安装gcc 4.8.5
- linux怎么杀掉mpd进程,linux怎么样安装mpd进程管理器
- Find n‘th number in a number system with only 3 and 4
- RK系列SDK -- i2s mclk 无输出
- 计算机北桥芯片结构图,电脑主板芯片维修教程第一节:电脑主板你是否真的认识...
- 移动友华PT924光猫获取超级用户方法
- 平面波角谱积分 matlab,第2章2_5平面波角谱.ppt
- 中国大陆新身份证号码算法
- 使用unity制作游戏——打砖块
热门文章
- 语音播报 android,Android 语音播报 文字转语音
- Latex使用Biber引擎显示参考文献
- 夏日专属:我在西瓜里装了个口袋妖怪!
- ie6注释造成文字“重影”分析。双文字
- 销量刷手,正在缔造直播电商的虚假盛世
- matlab学习(三)三维曲线和曲面
- html5+vue无法拖拽,Vue拖拽排序插件Vuedraggable使用方法详解_心善_前端开发者
- 分析数据, 缺失值处理 ,去重处理, 噪音处理
- python日志模块方法_python日志模块logbook使用方法
- [易飞]呆滞仓物料预计领用