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在将答案分组之前使用数组集合更新了答案,该集合包含许多不同的员工编号-因此,您希望最后只对该特定ID04052018
生成结果,还是对所有ID生成结果?你说你想要一个“单一结果”…