详解PHP 二维数组排序保持键名不变


Posted in PHP onMarch 06, 2019

 对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例:

<?php
$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);

详解PHP 二维数组排序保持键名不变

细心的朋友会看到,键名重置了,键名从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 二维数组排序保持键名不变

键名保持了不变,实现的原理很简单,先取出键名,然后对键名排序,再根据对应的键名赋值组成新数组返回。
大家可以看到,这里我们主要用到了php的几个核心的排序函数

asort() 对关联数组按照键值进行升序排序。

arsort()对关联数组按照键值进行降序排序。

natsort() 实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短的优先。数组的索引与单元值保持关联,

注意:在自然排序算法中,数字 2 小于 数字 10。在计算机排序算法中,10 小于 2,因为 "10" 中的第一个数字小于 2。

以上所述是小编给大家介绍的如何保持PHP 二维数组排序键名不变详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP多个版本的分析解释
Jul 21 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP中的函数声明与使用详解
May 27 PHP
php封装的mongodb操作类代码
Aug 06 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 #PHP
php ajax confirm 删除实例详解
Mar 06 #PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 #PHP
一次因composer错误使用引发的问题与解决
Mar 06 #PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 #PHP
浅谈php://filter的妙用
Mar 05 #PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 #PHP
You might like
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Python自省及反射原理实例详解
2020/07/06 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
网络工程师职业规划
2014/02/10 职场文书
大学生自荐信范文
2015/03/05 职场文书
小学科学课教学反思
2016/02/23 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python