php 根据指定的键对多维数组进行排序
根据指定的键对多维数组排序,可以按照多个键排序
我们通常有一些多维数组需要排序:
$guys = array(
array(
'name' => 'jake',
'score' => 80,
'grade' => 'A'
),
array(
'name' => 'jin',
'score' => 70,
'grade' => 'A'
),
array(
'name' => 'john',
'score' => 80,
'grade' => 'A'
),
array(
'name' => 'ben',
'score' => 20,
'grade' => 'B'
)
);
例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。
我们就可以用下面这个函数进行排序:
如果仅按照score排序:
$rows = list_orderByMultiCols($rows, array('score' => 'SORT_DESC'));
如果仅按照score,name排序:
$rows = list_orderByMultiCols($rows, array('score' => 'SORT_DESC', 'name' => 'SORT_ASC'));
其中用到了array_multisort函数:
他的排序方式有:SORT_ASC 升序,SORT_DESC 倒序
具体函数代码如下:
/*
* @param array $rowset 要排序的数组/行集
* @param array $args 排序的键
*
* @return array 排序后的数组
*/
function list_orderByMultiCols($rowset, $args)
{
$orderArray = array();
$orderRule = ''; foreach ($args as $orderField => $orderDir)
{
foreach ($rowset as $offset => $row)
{
$orderArray[$orderField][$offset] = $row[$orderField];
}
$orderRule .= '$orderArray[\'' . $orderField . '\'], ' . $orderDir . ', ';
} if (empty($orderArray) || empty($orderRule))
{
return $rowset;
}
eval('array_multisort(' . $orderRule . '$rowset);'); return $rowset;
}
php 根据指定的键对多维数组进行排序的更多相关文章
- 【CodeBase】通过层级键在多维数组中获取目标值
通过层级键在多维数组中获取目标值 /* *Author : @YunGaZeon *Date : 2017.08.09 *param data : Data Array *param keys : K ...
- PHP array_multisort—对多个数组或多维数组进行排序
PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以 ...
- array_multisort—对多个数组或多维数组进行排序
From: http://www.cnblogs.com/lwbqqyumidi/archive/2013/01/31/2887188.html PHP中array_multisort可以用来一次对多 ...
- PHP数组函数 array_multisort() ----对多个数组或多维数组进行排序
PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以 ...
- array_multisort函数,以及多维数组下排序的应用,并与usort函数对比
以前比较少用这个函数,大部分自己接触的业务里,处理稍微大一些的数组的时候几乎都是从db里取出来的,在db里就order by了. 最近倒是用了次,这个函数用来排序很强大,有点类似于sql中的order ...
- 代码分享:php对二维数组进行排序
发布:net/PHP编程 编辑:thebaby 2013-06-28 13:12:54 [大 中 小] 转自:http://www.jbxue.com/article/9991.html本文介 ...
- java中二维数组的排序
首先定义一个5X8的二维数组,然后使用随机数填充满.借助Arrays的方法对二维数组进行排序.参考思路:先把二维数组使用System.arraycopy进行数组复制到一个一维数组然后使用sort进行排 ...
- php 二维数组自定义排序
eg1:只根据一个规则进行排序,比如我下面的数组是一组满减折扣的信息,我要按照满减的金额从小到大排序 代码: <?php $arr =[ ["amount"=> 60, ...
- Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)
随机推荐
- PAT (Basic Level) Practise:1007. 素数对猜想
[题目链接] 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素数”. ...
- mysql样例数据库employees
Oracle和sqlserver都有基于员工信息的样例数据库,同样mysql上也是有的. 给出一个连接地址https://github.com/datacharmer/test_db. 下载后直接调用 ...
- [转载] C++位运算:将一个4字节整数的二进制表示中的001替换为011
#include <iostream> #include <assert.h> /** * Key: * * get someone bit: num & (mode1 ...
- [JSP] c:forEach 输出序号 每行自动生成序号
关键在于<c:forEach>的varStatus属性,具体代码如下: <table width="500" border="0" cells ...
- JSP显示-下拉框
<TABLE class="table-frame" id=p1 cellSpacing=0 cellPadding=0 width="99%" alig ...
- LNMP环境搭建(discuz论坛)
一.操作系统级环境及软件版本 操作系统:CentOS release 6.5 (Final)minimal 内核版本:2.6.32-431.el6.x86_64 MySQL版本:MySQL-5.6.2 ...
- Integer相加产生的类型转换问题
做项目时犯二没有搞清楚优先级的问题从而暴露出一个Integer相加而产生的类型转换的问题 Integer a; Integer b; Integer c; c= a+b==null?a:b; jav ...
- 越狱Season 1-Episode 12:Odd Man Out
Season 1-Episode 12:Odd Man Out -Sorry to keep you waiting. 抱歉让你等了半天 -Oh, it's, uh, not a problem. 嗯 ...
- 使用SSH密钥连接Github
使用Github,也许大家觉得比较麻烦的就是在每次push的时候,都需要输入用户名和密码.如果使用SSH,就可以记住用户名,并创建属于自己 的密码来保证安全操作,还有神奇的一招可以“不用输入密码”哦. ...
- URL 正则表达式
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? From h ...