详解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 4.2书写安全的脚本
Oct 09 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php四种基础算法代码实例
Oct 29 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 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
PHPAnalysis中文分词类详解
2014/06/13 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
玩转方法:call和apply
2014/05/08 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
对Python中range()函数和list的比较
2018/04/19 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python3爬虫学习入门教程
2018/12/11 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
好军嫂事迹材料
2014/01/15 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
数学备课组工作总结
2015/08/12 职场文书