I have an array structure like this and wanted to rearrange it to the one below. Any suggestions for a faster/simple fix? I already did the addition of the dates.
Input:
[
['user_id' => 255, 'display_name' => 'Mark', 'company_name' => 'Company_A'],
['user_id' => 150, 'display_name' => 'Paul', 'company_name' => 'Company_A'],
['user_id' => 25, 'display_name' => 'Hulk', 'company_name' => 'Company_B'],
['user_id' => 50, 'display_name' => 'Bob', 'company_name' => 'Company_B'],
];
Output:
[
'Company_A' => [
'company_total_hours' => '20h 45m',
'employees' => [
['user_id' => 255, 'display_name' => 'Mark'],
['user_id' => 150, 'display_name' => 'Paul'],
],
],
'Company_B' => [
'company_total_hours' => '7h 30m',
'employees' => [
['user_id' => 25, 'display_name' => 'Hulk'],
['user_id' => 50, 'display_name' => 'Bob'],
],
],
]
My Attempt:
$company_names = array();
foreach ($records as $k => $v) {
$company_names[] = $v->company_name;
}
$company_names = array_unique($company_names);
// hard coded testing
if (count($company_names) > 0) {
foreach($company_names as $k2 => $v2) {
$final_array[$v2]['company_total_hours'] = rand(1, 20);
$final_array[$v2]['employees'] = array(
array('user_id' => '255', 'display_name' => 'Mark'),
array('user_id' => '150', 'display_name' => 'Paul')
);
}
}
I don't see where you derive your hours from so I left that out.
$i = 0;
foreach($vals as $keys => $arrays) {
if(!isset($new[$arrays['company_name']]))
$i = 0;
$new[$arrays['company_name']]['employees'][$i]['display_name'] = $arrays['display_name'];
$new[$arrays['company_name']]['employees'][$i]['user_id'] = $arrays['user_id'];
$i++;
}
Gives you:
Array
(
[Company_A] => Array
(
[employees] => Array
(
[0] => Array
(
[display_name] => Mark
[user_id] => 255
)
[1] => Array
(
[display_name] => Paul
[user_id] => 150
)
)
)
[Company_B] => Array
(
[employees] => Array
(
[0] => Array
(
[display_name] => Hulk
[user_id] => 25
)
[1] => Array
(
[display_name] => Bob
[user_id] => 50
)
)
)
)