代码

  1. <?php
  2. /**
  3. * 根据key 给二维数组分组
  4. * @param array $arr 需要分组的数组
  5. * @param string $key 分组字段
  6. * @return array 分好组的数组
  7. */
  8. function arrayGroupBy(array $arr, string $key){
  9. $grouped = [];
  10. foreach ($arr as $value) {
  11. $grouped[$value[$key]][] = $value;
  12. }
  13. if (func_num_args() > 2) {
  14. $args = func_get_args();
  15. foreach ($grouped as $key => $value) {
  16. $parms = array_merge([$value], array_slice($args, 2, func_num_args()));
  17. $grouped[$key] = call_user_func_array('arrayGroupBy', $parms);
  18. }
  19. }
  20. return $grouped;
  21. }

实例

<?php

$arr = 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',
        )
);

$a = arrayGroupBy($arr,'type');
print_r($a);

打印结果为

Array
(
    [分组1] => 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
        (
            [0] => Array
                (
                    [id] => 3
                    [wo_id] => 31
                    [evaluate_id] => 4
                    [type] => 分组2
                    [ctime] => 2016-12-02 11:40:01
                )

            [1] => Array
                (
                    [id] => 4
                    [wo_id] => 2
                    [evaluate_id] => 5
                    [type] => 分组2
                    [ctime] => 2016-12-07 10:21:40
                )

            [2] => Array
                (
                    [id] => 5
                    [wo_id] => 2
                    [evaluate_id] => 3
                    [type] => 分组2
                    [ctime] => 2016-12-07 10:21:51
                )

        )

    [分组3] => Array
        (
            [0] => Array
                (
                    [id] => 6
                    [wo_id] => 2
                    [evaluate_id] => 2
                    [type] => 分组3
                    [ctime] => 2016-12-07 10:21:56
                )

            [1] => Array
                (
                    [id] => 7
                    [wo_id] => 4
                    [evaluate_id] => 2
                    [type] => 分组3
                    [ctime] => 2016-12-07 10:22:10
                )

        )

)