I'm trying to group by array with same value and key.
I have this array input in which i group it by employee no using the function below
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
]
I already group by the array by using this function
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;
}
I used it like this one
$data = $this->group_by("employee_no", $employee_attendance);
proving me this kind of result
"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
]
]
What it did is to group by the array with the same value of the key employee no.
What I want now is to get the sum of total hours for every employee no. The array data contains multiple employee number. Like this one
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
]
I tried using array_sum but doesn't get the result I want to.