php 多维数据根据某个或多个字段排序
实现多维数组的指定多个字段排序
上面的实例讲解了如何实现多维数组指定一个字段排序,但如果要实现指定多个字段来对数组进行排序该如何思考?
多个字段是几个?2个,3个或更多,所以这个不确定的因素需要排除。
我们先来看2指定2个字段进行排序的方案:
$arr = array(
'0' => array(
'id' => 3,
'age' => 27
),
'1' => array(
'id' => 5,
'age' => 50
),
'2' => array(
'id' => 4,
'age' => 44
),
'3' => array(
'id' => 3,
'age' => 78
)
);
foreach ( $arr as $key => $row ){
$id[$key] = $row ['id'];
$age[$key] = $row ['age'];
}
array_multisort($id, SORT_ASC, $age, SORT_DESC, $arr);
print_r($arr);
//result:Array([0]=>Array(['id']=>3 ['age']=>78) [1]=>Array(['id']=>3 ['age']=>27) [2]=>Array(['id']=>4 ['age']=>44) [3]=>Array(['id']=>5 ['age']=>50))
重构上述代码,只要采用php中的func_get_args函数,来动态获取传入的值,既可以解决多字段个数不确定的问题。实现如下: $array1 = array(
0=>array('id'=>8,'name'=>'Apple','age'=> 18),
1=>array('id'=>8,'name'=>'Bed','age'=>17),
2=>array('id'=>5,'name'=>'Cos','age'=>16),
3=>array('id'=>5,'name'=>'Cos','age'=>14)
);
function sortArrByManyField(){
$args = func_get_args();
if(empty($args)){
return null;
}
$arr = array_shift($args);
if(!is_array($arr)){
throw new Exception("第一个参数不为数组");
}
foreach($args as $key => $field){
if(is_string($field)){
$temp = array();
foreach($arr as $index=> $val){
$temp[$index] = $val[$field];
}
$args[$key] = $temp;
}
}
$args[] = &$arr;//引用值
call_user_func_array('array_multisort',$args);
return array_pop($args);
}
$arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);
print_r($arr);
php 多维数据根据某个或多个字段排序的更多相关文章
- SQL 先固定特殊的几行数据之外再按照某一字段排序方法(CASE 字段排序(CASE WHEN THEN)
查询用户表的数据,管理员用户始终在最前面,然后再按照CreateTime排序: SELECT TOP * FROM [dbo].[User] WHERE ParentID = '**' ORDER B ...
- SSAS系列——【07】多维数据(查询Cube)
原文:SSAS系列——[07]多维数据(查询Cube) 1.什么是MDX? MDX叫做"多维表达式",是一种查询语言,是一种和SQL类似的查询语言,它基于 XML for Anal ...
- SSAS系列——【08】多维数据(程序展现Cube)
原文:SSAS系列--[08]多维数据(程序展现Cube) 1.引用DLL? 按照之前安装的MS SQLServer的步骤安装完成后,发现在新建的项目中“Add Reference”时居然找不到Mic ...
- SSAS系列——【06】多维数据(创建Cube)
原文:SSAS系列--[06]多维数据(创建Cube) 1.文件类型说明 项目定义文件 (.dwproj).项目用户设置 (.dwproj.user).数据源文件 (.ds).数据源视图文件 (.ds ...
- SSAS系列——【03】多维数据(多维数据集对象)
原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube? 简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储 ...
- SSAS系列——【04】多维数据(物理体系结构)
原文:SSAS系列——[04]多维数据(物理体系结构) 1.本地多维数据集 本地多维数据集和本地挖掘模型允许在客户端工作站与网络的连接断开时对该工作站进行分析.在与本地多维数据集进行交互时,ADMOD ...
- SSAS系列——【05】多维数据(编程体系结构)
原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...
- SSAS系列——【02】多维数据(维度对象)
原文:SSAS系列——[02]多维数据(维度对象) 1.维度是什么? 数学中叫参数,物理学中是独立的时空坐标的数目.0维是一点,1维是线,2维是一个长和宽(或曲线)面积,3维是2维加上高度形成体积面. ...
- TensorflowTutorial_二维数据构造简单CNN
使用二维数据构造简单卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 图像和一些时序数据集都可以用二维数据的形式表现,我们此次使用随机分布的二位数据构造一个简单的CNN-网络卷积- ...
随机推荐
- ubuntu 桥接备忘
apt install birdge-utils 用于桥接网卡的工具,如命令brctl root@ubuntu:/etc/network# vim interfaces auto br0 ...
- C++ Assert()函数
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( i ...
- 使用Eclipse搭建JavaWeb开发环境的几个基本问题
Eclipse搭建JavaWeb开发环境 eclipse是一个用于java程序开发的ide软件,tomcat是一个运行javaweb应用的服务器软件,使用eclipse开发javaweb应用的时,首要 ...
- Culling & Depth Testing
[Culling & Depth Testing] Culling is an optimization that does not render polygons facing away f ...
- ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数
有程序没关闭游标, --打开了哪些游标 select * from v$open_cursor 在open cursor之后一定要注意要close cursor(在store procedure里更应 ...
- poj1067-取石子游戏 (威佐夫博弈)
http://poj.org/problem?id=1067 取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36 ...
- [codevs3981]动态最大子段和不带修改(线段树)
解题关键:最大子段和需要多个信息维护. 注意查询时的pushup. #include<cstdio> #include<cstring> #include<algorit ...
- linux ifconfig显示 command not found
本人装的是centos7 想看下网络配置 结果显示如图: 正常情况下 ifconfig 是在超级管理员 的所属的目录 sbin/下的命令 现在来查看该目录下. 没有找到,别急 用 yum sear ...
- Tomcat安装 以Linux 分支 Ubuntu Server 为例
以Linux 分支 Ubuntu Server 为例.一.相关目录及作用说明 /etc/tomcat6 - 全局配置 /usr/share/tomcat6/ - 程序主目录 /usr/share/to ...
- ubuntu18(笔记本) faster-rcnn实例程序运行
luo@luo-ThinkPad-W540:TensorflowProject$ source activate flappbird (flappbird) luo@luo-ThinkPad-W540 ...