PHP数组按相同的值和和进行分组

PHP数组按相同的值和和进行分组,php,arrays,laravel,Php,Arrays,Laravel,我正在尝试按具有相同值和键的数组分组 我有一个数组输入,我使用下面的函数按员工编号对其进行分组 0 => array:7 [▼ "employee_no" => "04052018" "employee_id" => 317 "company_id" => 4 "name" => "" "total_hours" => 8 "monthly_salary" => 15898.53 "daily_

我正在尝试按具有相同值和键的数组分组

我有一个数组输入,我使用下面的函数按员工编号对其进行分组

  0 => array:7 [▼
    "employee_no" => "04052018"
    "employee_id" => 317
    "company_id" => 4
    "name" => ""
    "total_hours" => 8
    "monthly_salary" => 15898.53
    "daily_salary" => 611.48
  ]
  1 => array:7 [▼
    "employee_no" => "06282018"
    "employee_id" => 319
    "company_id" => 4
    "name" => ""
    "total_hours" => 8
    "monthly_salary" => 32553.0
    "daily_salary" => 1252.04
  ]
  2 => array:7 [▼
    "employee_no" => "09291998"
    "employee_id" => 320
    "company_id" => 4
    "name" => " "
    "total_hours" => 8
    "monthly_salary" => 108916.75
    "daily_salary" => 4189.11
  ]
  3 => array:7 [▼
    "employee_no" => "12052011"
    "employee_id" => 323
    "company_id" => 4
    "name" => ""
    "total_hours" => 8
    "monthly_salary" => 36601.03
    "daily_salary" => 1407.73
  ]
我已经使用此函数按数组分组了

private function group_by($key, $data) {
    $result = array();

    foreach($data as $val) {
        if(array_key_exists($key, $val)){
            $result[$val[$key]][] = $val;
        }else{
            $result[""][] = $val;
        }
    }

    return $result;
}
我就是这样用的

$data = $this->group_by("employee_no", $employee_attendance);
向我证明这种结果

"04052018" => array:7 [▼
    0 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 317
      "company_id" => 4
      "name" => ""
      "total_hours" => 8
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    1 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 328
      "company_id" => 4
      "name" => ""
      "total_hours" => 8
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    2 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 343
      "company_id" => 4
      "name" => ""
      "total_hours" => 8
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    3 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 370
      "company_id" => 4
      "name" => ""
      "total_hours" => 2
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    4 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 377
      "company_id" => 4
      "name" => ""
      "total_hours" => 2
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    5 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 385
      "company_id" => 4
      "name" => ""
      "total_hours" => 8
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
    6 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 396
      "company_id" => 4
      "name" => ""
      "total_hours" => 8
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]
  ]
它所做的是使用与关键员工编号相同的值按数组分组

我现在想要的是获取每个员工编号的总小时数之和。数组数据包含多个员工编号。像这个

0 => array:7 [▼
      "employee_no" => "04052018"
      "employee_id" => 317
      "company_id" => 4
      "name" => ""
      "total_hours" => 48 -> calculated total hours
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]

1 => array:7 [▼
      "employee_no" => "04052019"
      "employee_id" => 318
      "company_id" => 4
      "name" => ""
      "total_hours" => 24 -> calculated total hours
      "monthly_salary" => 15898.53
      "daily_salary" => 611.48
    ]

我尝试使用数组\u sum但没有得到我想要的结果

将您的函数更改为

private function group_by($key, $data) {
    $result = array();
    foreach($data as $val) {
        array_key_exists($val[$key], $result) 
        ?
        ($result[$val[$key]]['total_hours'] += $val['total_hours'])
        :
        ($result[$val[$key]] = $val);
    }
    return $result;
}

输入数组的内容是什么?请尝试以下操作:
array\u sum(array\u列($data['%id%],'total\u hours')
Try
$total\u hours=array\u sum(array\u column($data[“04052018”],'total\u hours'))
I在将答案分组之前使用数组集合更新了答案,该集合包含许多不同的员工编号-因此,您希望最后只对该特定ID
04052018
生成结果,还是对所有ID生成结果?你说你想要一个“单一结果”…