我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组。
先来看以下数组,
Array
(
[0] => Array
(
[id] => 1
[wo_id] => 2
[evaluate_id] => 1
[type] => 分组1
[ctime] => 2016-12-02 11:39:34
) [1] => Array
(
[id] => 2
[wo_id] => 31
[evaluate_id] => 2
[type] => 分组1
[ctime] => 2016-12-12 11:39:50
) [2] => Array
(
[id] => 3
[wo_id] => 31
[evaluate_id] => 4
[type] => 分组2
[ctime] => 2016-12-02 11:40:01
) [3] => Array
(
[id] => 4
[wo_id] => 2
[evaluate_id] => 5
[type] => 分组2
[ctime] => 2016-12-07 10:21:40
) [4] => Array
(
[id] => 5
[wo_id] => 2
[evaluate_id] => 3
[type] => 分组2
[ctime] => 2016-12-07 10:21:51
) [5] => Array
(
[id] => 6
[wo_id] => 2
[evaluate_id] => 2
[type] => 分组3
[ctime] => 2016-12-07 10:21:56
) [6] => Array
(
[id] => 7
[wo_id] => 4
[evaluate_id] => 2
[type] => 分组3
[ctime] => 2016-12-07 10:22:10
)
)

这里是一个很典型的例子,如果我希望把 数组中的数据 根据 type(分组) 分开处理,如果不分组,可能循环上会非常冗余,所以有了下面的一个分组函数:

  public static function array_group_by($arr, $key)
{
$grouped = [];
foreach ($arr as $value) {
$grouped[$value[$key]][] = $value;
}
// Recursively build a nested grouping if more parameters are supplied
// Each grouped array value is grouped according to the next sequential key
if (func_num_args() > 2) {
$args = func_get_args();
foreach ($grouped as $key => $value) {
$parms = array_merge([$value], array_slice($args, 2, func_num_args()));
$grouped[$key] = call_user_func_array('array_group_by', $parms);
}
}
return $grouped;
}

$arr : 二维数组

$key: 需要分组的key

得到的结果是:

Array
(
[分组2] => Array
(
[0] => Array
(
[id] => 1
[wo_id] => 2
[evaluate_id] => 1
[ctime] => 2016-12-02 11:39:34
[type] => 分组2
) [1] => Array
(
[id] => 2
[wo_id] => 31
[evaluate_id] => 2
[ctime] => 2016-12-12 11:39:50
[type] => 分组2
) [2] => Array
(
[id] => 3
[wo_id] => 31
[evaluate_id] => 4
[ctime] => 2016-12-02 11:40:01
[type] => 分组2
) ) [分组1] => Array
(
[0] => Array
(
[id] => 4
[wo_id] => 2
[evaluate_id] => 5
[ctime] => 2016-12-07 10:21:40
[type] => 分组1
) [1] => Array
(
[id] => 5
[wo_id] => 2
[evaluate_id] => 3
[ctime] => 2016-12-07 10:21:51
[type] => 分组1
)
)
)

最新文章

  1. 如何配置远程mysql服务器
  2. 在IIS中实现JSP
  3. ios学习之UISwipeGestureRecognizer手势识别
  4. iOS ZBarSDK的基本使用:扫描
  5. ASP.NET MVC - 发布网站
  6. Shadow Mapping 的原理与实践(一)
  7. HDFS体系结构
  8. P - A + B(第二季水)
  9. java操作mongodb——查询数据
  10. CSS文字垂直居中和font-family属性
  11. Eureka源码探索(一)-客户端服务端的启动和负载均衡
  12. laravel和lumen数据库链接错误_FatalErrorException Call to a member function connection
  13. C++程序设计方法4:函数模板
  14. 帝国cms修改栏目后文章列表的url错误怎么解决
  15. DS1-3
  16. Taxi
  17. python的eval、exec函数使用总结
  18. Python学习札记(三十二) 面向对象编程 Object Oriented Program 3
  19. Windows系统下MySQL解压版添加到系统服务
  20. 3s 简介

热门文章

  1. angularjs中的directive scope配置
  2. oc集合
  3. AngularJS之Service(四)
  4. 使用maven来管理java项目
  5. Objective-C中的类目,延展,协议
  6. Cookie/Session机制详解
  7. 1Z0-053 争议题目解析690
  8. 相克军_Oracle体系_随堂笔记004-shared pool
  9. hibernate笔记--单向多对一映射方法
  10. LSM Tree存储组织结构介绍