对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例:

$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);

细心的朋友会看到,键名重置了,键名从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的几个核心的排序函数

asort() 对关联数组按照键值进行升序排序。

arsort()对关联数组按照键值进行降序排序。

natsort() 实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短的优先。数组的索引与单元值保持关联,

注意:在自然排序算法中,数字 2 小于 数字 10。在计算机排序算法中,10 小于 2,因为 "10" 中的第一个数字小于 2。

以上所述是小编给大家介绍的如何保持PHP 二维数组排序键名不变详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

php数组排序后保留键名,详解PHP 二维数组排序保持键名不变相关推荐

  1. AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练)

    AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练) 1.      大家碰到的很多都是二维码识别不出来的情况. 原因:周围环境的光太强或太暗,遮挡了二维码的信息,摄像头识别不到全部的信 ...

  2. python三维图切片提取_详解Python二维数组与三维数组切片的方法

    如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...

  3. Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值

    为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...

  4. python二维数组切片规则_详解Python二维数组与三维数组切片的方法

    如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...

  5. 【详解】二维数组的长度问题。int[][] arr = new arr[3][4];arr.length;arr[0].length;

    二维数组可以看成一个一维数组.二维数组的行可以看成一维数组的元素,列可以看成具体其中的元素. 1.arr.length代表的是二维数组的行 2.arr[0].length是二维数组的列. 具体看下面测 ...

  6. 【机器学习】—— K-means聚类算法原理详解 以及 二维、三维数据的K-means聚类Python实现

    文章目录 一.K-Means聚类算法原理过程 1.1 K-means聚类的一些细节 1.1.1 样本x(i)x^{(i)}x(i)与中心点μkμ_kμk​距离的衡量 1.1.2 K-means聚类算法 ...

  7. php 二维排序函数,PHP二维数组排序函数

    PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: functi ...

  8. c语言sort函数排序二维数组,js 二维数组排序sort()函数

    一.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; arr.sort(function(x, y){ return x[0] – y[0]; }) ...

  9. 外键约束详解及术语释疑

    外键约束详解及术语释疑 先要理清几个概念: 1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作 ...

最新文章

  1. htc820+android+l,首款高通64位八核 HTC Desire 820评测
  2. 基于matlab的对流层散射信道特性仿真,对流层散射信道建模和FPGA实现
  3. C++ protobuf 不仅仅是序列化……
  4. MVC视图之间调用方法总结
  5. Spark Streaming揭秘 Day16 数据清理机制
  6. Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制
  7. go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数
  8. [Leetcode][第75题][JAVA][颜色分类][双(三)指针][计数排序]
  9. 你的DNA都会玩摇滚了,你却还是个音痴
  10. IPv4 和 IPv6 有什么区别
  11. 字符集不同导致的ORA-00972
  12. Centos 6.9 编译安装gcc 4.8.5
  13. linux怎么杀掉mpd进程,linux怎么样安装mpd进程管理器
  14. Find n‘th number in a number system with only 3 and 4
  15. RK系列SDK -- i2s mclk 无输出
  16. 计算机北桥芯片结构图,电脑主板芯片维修教程第一节:电脑主板你是否真的认识...
  17. 移动友华PT924光猫获取超级用户方法
  18. 平面波角谱积分 matlab,第2章2_5平面波角谱.ppt
  19. 中国大陆新身份证号码算法
  20. 使用unity制作游戏——打砖块

热门文章

  1. 语音播报 android,Android 语音播报 文字转语音
  2. Latex使用Biber引擎显示参考文献
  3. 夏日专属:我在西瓜里装了个口袋妖怪!
  4. ie6注释造成文字“重影”分析。双文字
  5. 销量刷手,正在缔造直播电商的虚假盛世
  6. matlab学习(三)三维曲线和曲面
  7. html5+vue无法拖拽,Vue拖拽排序插件Vuedraggable使用方法详解_心善_前端开发者
  8. 分析数据, 缺失值处理 ,去重处理, 噪音处理
  9. python日志模块方法_python日志模块logbook使用方法
  10. [易飞]呆滞仓物料预计领用