详解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 相关文章推荐
php中用文本文件做数据库的实现方法
Mar 27 PHP
PHP编实现程动态图像的创建代码
Sep 28 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
php全角字符转换为半角函数
Feb 07 PHP
php-fpm配置详解
Feb 12 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 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安全配置
2006/10/09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
教你php如何实现验证码
2016/01/20 PHP
PHP的全局错误处理详解
2016/04/25 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python标准库defaultdict模块使用示例
2015/04/28 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python计算两个地址之间的距离方法
2018/06/09 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
python dict如何定义
2020/09/02 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
个人简历自我鉴定
2013/10/11 职场文书
2014年老干部工作总结
2014/11/21 职场文书
离婚被告代理词
2015/05/23 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
Java界面编程实现界面跳转
2022/06/16 Java/Android