详解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 高效率写法 推荐
Feb 21 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
PHP排序算法类实例
Jun 17 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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借助phpmailer发送邮件
2015/05/11 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
客服文员岗位职责
2013/11/29 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA