详解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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
Symfony查询方法实例小结
Jun 28 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
php获取微信openid方法总结
Oct 10 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
Thinkphp5框架异常处理操作实例分析
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 禁止页面缓存输出
2009/01/07 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
修改发贴的编辑功能
2007/03/07 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
vue 中filter的多种用法
2018/04/26 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python实现获取网站PR及百度权重
2015/01/21 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python对html过滤处理的方法
2018/10/21 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
python中对数据进行各种排序的方法
2019/07/02 Python
pygame实现成语填空游戏
2019/10/29 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
华为python面试题
2016/05/03 面试题
酒店周年庆活动方案
2014/08/21 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
运动会闭幕词
2015/01/28 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
家属联谊会致辞
2015/07/31 职场文书
2019 入党申请书范文
2019/07/10 职场文书
java版 联机五子棋游戏
2022/05/04 Java/Android