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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
php下实现农历日历的代码
Mar 07 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
php调用google接口生成二维码示例
Apr 28 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
Laravel 实现添加多语言提示信息
Oct 25 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 mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP return语句的另一个作用
2014/07/30 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
ThinkPHP安装和设置
2015/07/27 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
JS Timing
2007/04/21 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python提取内容关键词的方法
2015/03/16 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
python自动翻译实现方法
2016/05/28 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
python 字典的打印实现
2019/09/26 Python
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
"序列点" 是什么
2016/07/29 面试题
办理护照介绍信
2014/01/16 职场文书
读书活动总结范文
2014/04/26 职场文书
企业口号大全
2014/06/12 职场文书
心理学专业求职信
2014/06/16 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android