PHP将二位数组按照第二维的某个元素的值进行排序
例如:
//原始数组是这样的,希望能够按照第二维中的run_date升序或者降序进行排序:
$arr=array(
0=>array(
'run_date'=>'2017-11-21',
'count'=>'5'
),
1=>array(
'run_date'=>'2017-11-20',
'count'=>'10'
),
2=>array(
'run_date'=>'2017-11-22',
'count'=>'10'
)
);
//希望得到:
$arr=array(
0=>array(
'run_date'=>'2017-11-20',
'count'=>'5'
),
1=>array(
'run_date'=>'2017-11-21',
'count'=>'10'
),
2=>array(
'run_date'=>'2017-11-22',
'count'=>'10'
)
);
当然,用循环遍历是可以解决的,但是还是觉得效率有点低,这里有另外一个解决方案,是使用两个PHP提供的函数:
array_column 、 array_multisort 还是上面的数组:
//先用array_column 多维数组按照纵向(列)取出 $date = array_column($arr, 'run_date'); //上面得到的结果:array(0=>'2017-11-21',1=>'2017-11-20',3=>'2017-11-22') //再用array_multisort 结合array_column得到的结果对$arr进行排序 array_multisort($date,SORT_ASC,$arr); //最终的结果:
$arr=array(
0=>array(
'run_date'=>'2017-11-20',
'count'=>'5'
),
1=>array(
'run_date'=>'2017-11-21',
'count'=>'10'
),
2=>array(
'run_date'=>'2017-11-22',
'count'=>'10'
)
);
附:
1、array_column 参考我之前的博客 http://www.cnblogs.com/Steven-shi/p/5897745.html
2、array_multisort array_multisort() 函数对多个数组或多维数组进行排序,可以用来一次对多个PHP二维数组排序进行排序,或者根据某一维或多维对多维数组进行排序
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
SORT_ASC - 默认,按升序排列。(A-Z)
SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
SORT_REGULAR - 默认。将每一项按常规顺序排列。
SORT_NUMERIC - 将每一项按数字顺序排列。
SORT_STRING - 将每一项按字母顺序排列。
array_multisort(array1,sorting order,sorting type,array2,array3...)
array1 : 必需。规定输入的数组。
sorting order : 可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。
sorting type : 可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。
array2 : 可选。规定输入的数组。
array3 : 可选。规定输入的数组。
注释:字符串键名将被保留,但是数字键将被重新索引,从 0 开始,并以 1 递增。
注释:您可以在每个数组后设置排序顺序和排序类型。如果没有设置,每个数组参数会使用默认值。
PHP二维数组排序是按照第一个数组进行排序,并且调整后面的顺序。像这样的数组:
array( 'id' => array(1,3,2), 'data'=>array('a','c','b'))
只要按照id进行多维排序,就可以了。但是很多时候,我们构造出的数组是这样的:
array( array('id'=>1,'data'=>'a'), array('id'=>3,'data'=>'c'), array('id'=>2,'data'=>'b') );
PHP二维数组排序的元素是按行排列的,需要按其中的一列进行排序。PHP好像也没提供类似矩阵转置的函数,所以不能直接使用array_multisort进行多维排序。不过只需要先把排序的列抽取出来,作为第一个参数传给array_multisort即可
PHP将二位数组按照第二维的某个元素的值进行排序的更多相关文章
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- C++ 出现bug :二位数组的操作运算,求非对角线的元素的和
编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...
- PHP 之二位数组根据某个字段排序封装
/** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...
- 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)
Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比.Javascript数组中的元素不必为同样的数据类型,能够在数组每一个元素上混合使用数字.日期 ...
- C++ 二位数组做参数传递
指针的强大功能,,,,简直牛逼!!! #include<iostream> #include<cstdio> #include<map> using namespa ...
- [C++]指针/指针数组/数组指针/多维指针/单值指针/多值指针
int main(){ //单值指针(指向单个值得指针,类同普通变量) int *px = new int; *px = 100; printf("%d",*px); delete ...
- C# 一维数组 二位数组 多维数组
什么是数组? 数组是一组变量,就是把一些变量串在一起,放在一块. 数组的作用? 假设有一堆变量,每个变量都有一些程序,那么这堆程序放在一起 程序就会混乱,处理起来有些麻烦,那么数组就是把这些变量放在 ...
- PHP二位数组/多维数组 根据某个键值排序
$arr[$i]['FirstName'] = $d_first_name;$arr[$i]['MiddleName'] = $d_middle_name;$arr[$i]['LastName'] = ...
- c语言 函数返回二位数组 函数参数为二维数组
通过typedef可以简单实现.也可以直接写. 写了两个简单的矩阵操作的函数简单示例. #include <stdio.h> #include <stdlib.h> const ...
随机推荐
- socket应用
socket的使用 socket.socket(网络层ip协议蔟,传输层协议类型,默认协议) # server.py # 导入模块 import socket # 实例化服务器,使用ipv4协议,tc ...
- github使用手册
1.git init 2.git add README.md (增加文件夹/文件:git add dir/files) 3.git commit -m "注释内容” 4.git push - ...
- windows环境下wampserver配置https
因为公司业务主要是在微信上进行开展的,所以作为程序员的我们每天的开发任务就都是在与微信打交道,这个时候我们就需要在本地配置端口映射到外网,方便我们在微信客户端进行调试. 最近某种需要,所以需要配置 h ...
- iOS Touch ID 简易开发教程
转自:NsstringFromName 支持系统和机型 iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁 ...
- .NET开源工作流RoadFlow-表单设计-数据字典选择
添加数字字典选择框: 选择范围:指定可选择的字典范围. 是否多选:指定是否可以多选.
- keras 自定义 custom 函数
转自: https://kexue.fm/archives/4493/,感谢分享! Keras是一个搭积木式的深度学习框架,用它可以很方便且直观地搭建一些常见的深度学习模型.在tensorflow出来 ...
- Android应用开发基础之八:广播与服务(二)
服务两种启动方式 startService:服务被启动之后,跟启动它的组件没有一毛钱关系 bindService:跟启动它的组件同生共死 绑定服务和解绑服务的生命周期方法:onCreate->o ...
- Win8 Pro 64 Install .net3.5 在线升级会遇到错误0x800F0906。
很多人安装Win8后都遇到了无法升级.NET Framework 3.5.1的问题,在线升级会遇到错误0x800F0906. Uninstall Windows update kB: KB296682 ...
- OpenSSL.Net 在生产环境中无法正常加载的原因分析与解决 z
http://blog.csdn.net/wangjia184/article/details/6990098 http://www.openssl.org/ 在本地测试好好的代码部署到生产环境后,遇 ...
- 【Leetcode】【Easy】Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...