czhtr 发表于 2017-12-30 21:37:31

PHP 根据key 给二维数组分组

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

  

Array  
(
[
0] => Array  (

=> 1
=> 2
=> 1
=> 分组1
=> 2016-12-02 11:39:34  )
  

[
1] => Array  (

=> 2
=> 31
=> 2
=> 分组1
=> 2016-12-12 11:39:50  )
  

[
2] => Array  (

=> 3
=> 31
=> 4
=> 分组2
=> 2016-12-02 11:40:01  )
  

[
3] => Array  (

=> 4
=> 2
=> 5
=> 分组2
=> 2016-12-07 10:21:40  )
  

[
4] => Array  (

=> 5
=> 2
=> 3
=> 分组2
=> 2016-12-07 10:21:51  )
  

[
5] => Array  (

=> 6
=> 2
=> 2
=> 分组3
=> 2016-12-07 10:21:56  )
  

[
6] => Array  (

=> 7
=> 4
=> 2
=> 分组3
=> 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 (() > 2) {
  $args = ();
  foreach ($grouped as $key => $value) {
  $parms = ([$value], ($args, 2, ()));
  $grouped[$key] = ('array_group_by', $parms);
  }
  }
  return $grouped;
  }
  

  $arr : 二维数组
  $key: 需要分组的key
  得到的结果是:
  

Array  
(
[分组2]
=> Array  (
[
0] => Array  (

=> 1
=> 2
=> 1
=> 2016-12-02 11:39:34
=> 分组2  )
  

[
1] => Array  (

=> 2
=> 31
=> 2
=> 2016-12-12 11:39:50
=> 分组2  )
  

[
2] => Array  (

=> 3
=> 31
=> 4
=> 2016-12-02 11:40:01
=> 分组2  )
  

  )
  

[分组1]
=> Array  (
[
0] => Array  (

=> 4
=> 2
=> 5
=> 2016-12-07 10:21:40
=> 分组1  )
  

[
1] => Array  (

=> 5
=> 2
=> 3
=> 2016-12-07 10:21:51
=> 分组1  )
  )
  
)
  
页: [1]
查看完整版本: PHP 根据key 给二维数组分组