详解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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
php中{}大括号是什么意思
Dec 01 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
php自定义session示例分享
Apr 22 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 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 函数执行效率的小比较
2010/10/17 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
JavaScript之编码规范 推荐
2012/05/23 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
构建Python包的五个简单准则简介
2015/06/15 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python中有关时间日期格式转换问题
2019/12/25 Python
为什么说python适合写爬虫
2020/06/11 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
自行车广告词大全
2014/03/21 职场文书
大班开学家长寄语
2014/04/04 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
售后服务承诺函格式
2015/01/21 职场文书
白银帝国观后感
2015/06/17 职场文书
感恩老师主题班会
2015/08/12 职场文书
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
Python 视频画质增强
2022/04/28 Python