PHP 根据key 给二维数组分组
我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组。
先来看以下数组,
Array ( [0]=>Array ( [id]=>1 [wo_id]=>2 [evaluate_id]=>1 [type]=>分组1 [ctime]=>2016-12-0211:39:34 ) [1]=>Array ( [id]=>2 [wo_id]=>31 [evaluate_id]=>2 [type]=>分组1 [ctime]=>2016-12-1211:39:50 ) [2]=>Array ( [id]=>3 [wo_id]=>31 [evaluate_id]=>4 [type]=>分组2 [ctime]=>2016-12-0211:40:01 ) [3]=>Array ( [id]=>4 [wo_id]=>2 [evaluate_id]=>5 [type]=>分组2 [ctime]=>2016-12-0710:21:40 ) [4]=>Array ( [id]=>5 [wo_id]=>2 [evaluate_id]=>3 [type]=>分组2 [ctime]=>2016-12-0710:21:51 ) [5]=>Array ( [id]=>6 [wo_id]=>2 [evaluate_id]=>2 [type]=>分组3 [ctime]=>2016-12-0710:21:56 ) [6]=>Array ( [id]=>7 [wo_id]=>4 [evaluate_id]=>2 [type]=>分组3 [ctime]=>2016-12-0710:22:10 ) )
这里是一个很典型的例子,如果我希望把数组中的数据根据type(分组)分开处理,如果不分组,可能循环上会非常冗余,所以有了下面的一个分组函数:
publicstaticfunctionarray_group_by($arr,$key) { $grouped=[]; foreach($arras$value){ $grouped[$value[$key]][]=$value; } //Recursivelybuildanestedgroupingifmoreparametersaresupplied //Eachgroupedarrayvalueisgroupedaccordingtothenextsequentialkey if(func_num_args()>2){ $args=func_get_args(); foreach($groupedas$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-0211:39:34 [type]=>分组2 ) [1]=>Array ( [id]=>2 [wo_id]=>31 [evaluate_id]=>2 [ctime]=>2016-12-1211:39:50 [type]=>分组2 ) [2]=>Array ( [id]=>3 [wo_id]=>31 [evaluate_id]=>4 [ctime]=>2016-12-0211:40:01 [type]=>分组2 ) ) [分组1]=>Array ( [0]=>Array ( [id]=>4 [wo_id]=>2 [evaluate_id]=>5 [ctime]=>2016-12-0710:21:40 [type]=>分组1 ) [1]=>Array ( [id]=>5 [wo_id]=>2 [evaluate_id]=>3 [ctime]=>2016-12-0710:21:51 [type]=>分组1 ) ) )
以上所述是小编给大家介绍的PHP根据key给二维数组分组,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!