详解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中的串行化变量和序列化对象
Sep 05 PHP
初级的用php写的采集程序
Mar 16 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
php session 写入数据库
Feb 13 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 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
类的另类用法--数据的封装
2006/10/09 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
vue实现放大镜效果
2020/09/17 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
pandas 条件搜索返回列表的方法
2018/10/30 Python
简单了解Django项目应用创建过程
2020/07/06 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
交通事故检查书范文
2014/01/30 职场文书
酒店端午节促销方案
2014/02/18 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
党员公开承诺书内容
2014/05/20 职场文书
法人委托书范本格式
2014/09/15 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书