对二维数组指定的键名排序,首先大家想到的是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. A股暴跌,户均亏2万!刚写好的辞职信又撕了……
  2. python语言视频-Python语言之Python3 实现简易局域网视频聊天工具
  3. 文巾解题 7. 整数反转
  4. VirtualBox下Ubuntu利用桥接方式上网
  5. 知识管理系列---3.程序实现
  6. 华为申请注册小艺商标,该商标多品类已被注册
  7. 问题 A: 编写函数:比较三个数大小 (Append Code)
  8. 电脑打字学习_高邮学习商务办公难不难?/电脑办公的学习内容有哪些? - 教育培训消费 - 得意生活...
  9. SharePoint Portal Server-管理匿名访问设置
  10. “怎样解题”-第二部分:怎样题解——作者:波利亚
  11. mybats-puls---条件构造器Wrapper,插件扩展,SQL注入器,公共字段填充
  12. iAd框架详细解析 —— ASM
  13. 2020身高体重标准表儿童_2020最新宝宝身高体重标准表(中国标准版)
  14. geany java编译器乱码_Ubuntu Geany打开文件乱码的解决方法
  15. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day23】—— 算法1
  16. 激活MDI中已经打开过的文件
  17. 利用Excel进行相关、回归分析
  18. linux下不解包查看tar包文件内容
  19. 蚂蚁金服Java暑期面试
  20. 打印功能的实现jquery.jqprint-0.3

热门文章

  1. 十年建模师带你学习3D建模,次时代游戏建模人物制作经验分享!越努力越幸运
  2. Python Matplotlib绘制漂亮的K线图,利用Tushare绘制K线图
  3. python参考书哪本好_关于Python有哪些推荐的参考书?
  4. 新标准C++(郭炜)第四章细节问题小结(1):运算符重载(一)
  5. 制作centos8的系统启动盘
  6. Python常用字符编码(转)
  7. 一些数学几何知识和小技巧
  8. pdf格式可以编辑吗?提供几个思路
  9. 华为路由器--***的配置
  10. ASO优化:关于后台关键词设置的逗号的使用