PHP 根据key 给二维数组分组


Posted in PHP onDecember 09, 2016

我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组。

先来看以下数组,

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
)
)
)

以上所述是小编给大家介绍的PHP 根据key 给二维数组分组,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP常用函数小技巧
Sep 11 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
Yii多表联合查询操作详解
Jun 02 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
php语法检查的方法总结
Jan 21 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 #PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 #PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 #PHP
Zend Framework实现自定义过滤器的方法
Dec 09 #PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 #PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 #PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 #PHP
You might like
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
简单的Jquery全选功能
2013/11/07 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
Javascript的闭包详解
2014/12/26 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
vue设置一开始进入的页面教程
2019/10/28 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Tornado 多进程实现分析详解
2018/01/12 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python中的asyncio代码详解
2019/06/10 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python二元算术运算常用方法解析
2020/09/15 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
餐饮主管岗位职责
2013/12/10 职场文书
高中政治教学反思
2014/01/18 职场文书
企业领导对照检查材料
2014/08/20 职场文书
小学英语听课心得体会
2016/01/14 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL