详解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的图形函数中显示汉字
Oct 09 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
基于PHP文件操作的详解
Jun 05 PHP
获取URL文件名后缀
Oct 24 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
php对接java现实加签验签的实例
Nov 25 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 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中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
js 程序执行与顺序实现详解
2013/05/13 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
详解package.json版本号规则
2019/08/01 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
Python制作动态字符图的实例
2019/01/27 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python3爬楼梯算法示例
2019/03/04 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
给导游的表扬信
2014/01/10 职场文书
大学校庆邀请函
2014/01/11 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
车贷收入证明范本
2014/09/14 职场文书
安装工程师岗位职责
2015/02/13 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
借条格式范本
2015/05/25 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
Python读写yaml文件
2022/03/20 Python