例如:

 //原始数组是这样的,希望能够按照第二维中的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将二位数组按照第二维的某个元素的值进行排序的更多相关文章

  1. java中Arrays.sort()对二位数组进行排序

    int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...

  2. C++ 出现bug :二位数组的操作运算,求非对角线的元素的和

    编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...

  3. PHP 之二位数组根据某个字段排序封装

    /** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...

  4. 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

    Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比.Javascript数组中的元素不必为同样的数据类型,能够在数组每一个元素上混合使用数字.日期 ...

  5. C++ 二位数组做参数传递

    指针的强大功能,,,,简直牛逼!!! #include<iostream> #include<cstdio> #include<map> using namespa ...

  6. [C++]指针/指针数组/数组指针/多维指针/单值指针/多值指针

    int main(){ //单值指针(指向单个值得指针,类同普通变量) int *px = new int; *px = 100; printf("%d",*px); delete ...

  7. C# 一维数组 二位数组 多维数组

    什么是数组? 数组是一组变量,就是把一些变量串在一起,放在一块. 数组的作用? 假设有一堆变量,每个变量都有一些程序,那么这堆程序放在一起  程序就会混乱,处理起来有些麻烦,那么数组就是把这些变量放在 ...

  8. PHP二位数组/多维数组 根据某个键值排序

    $arr[$i]['FirstName'] = $d_first_name;$arr[$i]['MiddleName'] = $d_middle_name;$arr[$i]['LastName'] = ...

  9. c语言 函数返回二位数组 函数参数为二维数组

    通过typedef可以简单实现.也可以直接写. 写了两个简单的矩阵操作的函数简单示例. #include <stdio.h> #include <stdlib.h> const ...

随机推荐

  1. scss-字符串连接符

    + 运算可用于连接字符串: // SCSS p { cursor: e + -resize; } // 编译后的 CSS 样式 p { cursor: e-resize; } 请注意,如果带引号的字符 ...

  2. 洛谷P1730 最小密度路径(floyd)

    题意 题目链接 Sol zz floyd. 很显然的一个dp方程\(f[i][j][k][l]\)表示从\(i\)到\(j\)经过了\(k\)条边的最小权值 可以证明最优路径的长度一定\(\leqsl ...

  3. 使用angular帮你实现拖拽

    拖拽有多种写法,在这里就看一看angular版的拖拽. <!DOCTYPE html> <html ng-app="myApp"> <head> ...

  4. jQuery可调整表和列宽插件-colResizable

    最基本的例子 引入JS <script src="js/jquery-1.8.0.min.js" type="text/javascript">&l ...

  5. 关于Java中的线程安全(线程同步)

    java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫 ...

  6. 20_AOP_Advice增强1(前置、后置、环绕)

    [增强的类型] 1.前置增强:org.springframework.aop.BeforeAdvice. 由于Spring只支持方法级别的增强,所以MethodBeforeAdvice是目前可用的前置 ...

  7. VueJs - 世界地图(根据返回国家value值的大小来展示颜色的深浅分布)

    一.实现功能 1.画出世界各国的世界地图 2.根据返回name->国家全称.value->数量,渲染对比世界各国成功的国家,予以值域范围的高亮 3.滑入国家地图,出现tooltip框,提示 ...

  8. vue v-for(数组遍历)

    1.js代码 var box=new Vue({ el:'.box', data:{ msg:['hello','ok','dome'], //定义一个数组 msg2:{a:'ok',b:" ...

  9. ACM-ICPC (10/11)

    莫比乌斯 今年的多校比赛,莫比乌斯反演的题目经常出现,但是我们队对于这种题可以说是直接放掉,不是因为没学过,多少了解一些,但是也只是皮毛,导致根本就做不出来,其实想一想,其实次数多了,就可以看出原因了 ...

  10. POJ 3070 矩阵快速幂

    题意:求菲波那切数列的第n项. 分析:矩阵快速幂. 右边的矩阵为a0 ,a1,,, 然后求乘一次,就进一位,求第n项,就是矩阵的n次方后,再乘以b矩阵后的第一行的第一列. #include <c ...