详解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生成缩略图的代码
Jan 12 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
PHP实现抽奖功能实例代码
Jun 30 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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
How do I change MySQL timezone?
2008/03/26 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
js实现打字小游戏
2019/12/17 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
python插入排序算法实例分析
2015/07/03 Python
基于Python闭包及其作用域详解
2017/08/28 Python
分析python请求数据
2018/08/19 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python实现同一局域网下传输图片
2020/03/20 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
2013年员工自我评价范文
2013/12/27 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
教导处工作制度
2014/01/18 职场文书
表彰大会主持词
2014/03/26 职场文书
岗位安全生产责任书
2014/07/28 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Django REST framework 限流功能的使用
2021/06/24 Python