详解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中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php数组中删除元素的实现代码
Jun 22 PHP
PHP动态柱状图实现方法
Mar 30 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP封装的完整分页类示例
Aug 21 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
php封装的page分页类完整实例代码
Feb 01 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
golang 调用 php7详解及实例
2017/01/04 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
javascript实现简易计算器
2017/02/01 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python安装scipy的方法步骤
2019/06/26 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
小学教师国培感言
2014/02/08 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript