详解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脚本加密专家php解密算法
Sep 13 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
php常用hash加密函数
Nov 22 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
PHP编写RESTful接口
Feb 23 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
解决Laravel5.5下的toArray问题
Oct 15 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作的文本留言本的例子(三)
2006/10/09 PHP
PHP开发框架总结收藏
2008/04/24 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
在Django框架中设置语言偏好的教程
2015/07/27 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
python实现滑雪游戏
2020/02/22 Python
Python 绘制可视化折线图
2020/07/22 Python
python中time.ctime()实例用法
2021/02/03 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
党员反对四风问题思想汇报
2014/09/12 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
如何在python中实现ECDSA你知道吗
2021/11/23 Python
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python