详解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 23 PHP
php array_map()数组函数使用说明
Jul 12 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
Yii CGridView用法实例详解
Jul 12 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 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对数组排序的简单实例
2013/12/25 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
"序列点" 是什么
2016/07/29 面试题
校园学雷锋活动月总结
2014/03/09 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
个人自荐材料
2014/05/23 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
求职导师推荐信范文
2015/03/27 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis