详解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
第十一节--重载
Nov 16 PHP
php小偷相关截取函数备忘
Nov 28 PHP
php流量统计功能的实现代码
Sep 29 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
php开启openssl的方法
May 15 PHP
php创建多级目录的方法
Mar 24 PHP
微信支付开发发货通知实例
Jul 12 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
Yii框架安装简明教程
May 15 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python定时执行之Timer用法示例
2015/05/27 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Puppeteer使用示例详解
2019/06/20 Python
Python Web版语音合成实例详解
2019/07/16 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
师范生自我鉴定范文
2013/10/05 职场文书
结构工程个人自荐信范文
2013/11/30 职场文书
升学宴演讲稿
2014/09/01 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
高三生物教学反思
2016/02/22 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
React自定义hook的方法
2022/06/25 Javascript