详解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 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
php 获取完整url地址
Dec 20 PHP
PHP技术开发技巧分享
Mar 23 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
php生成rss类用法实例
Apr 14 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 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 HTML代码串截取代码
2008/12/29 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
javascript 多级checkbox选择效果
2009/08/20 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
详解javascript void(0)
2020/07/13 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
Python跳出循环语句continue与break的区别
2014/08/25 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python pymongo模块用法示例
2018/03/31 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
django Admin文档生成器使用详解
2019/07/22 Python
使用python+whoosh实现全文检索
2019/12/09 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
python interpolate插值实例
2020/07/06 Python
python设置表格边框的具体方法
2020/07/17 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
教师自荐信范文
2013/12/09 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书