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 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
杏林同学录(七)
Oct 09 PHP
PHP 类相关函数的使用详解
May 10 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
PHP的引用详解
Feb 22 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
PHP抽象类基本用法示例
Dec 28 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
实例分析10个PHP常见安全问题
Jul 09 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 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
php导入导出excel实例
2013/10/25 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JQuery jsonp 使用示例代码
2009/08/12 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
js实现开关灯效果
2020/03/30 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
python条件和循环的使用方法
2013/11/01 Python
Python异常处理总结
2014/08/15 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
Linux面试题LINUX系统类
2015/11/25 面试题
自我鉴定怎么写
2014/01/12 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
电信营业员岗位职责
2015/04/14 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书