I have following data which I want to merge when it repeats:
{
"employee_id": 7,
"organization_id": 1,
"year": 2021,
"tenure_id": 1,
"leave_name": "Annual Leaves",
"leaves": 26,
"lates": "1",
"leave_id": 1,
"assigned_quota": 99,
"available_quota": "12",
"is_default_leave": 1,
"exceeding": 14
},
{
"employee_id": 15,
"organization_id": 1,
"year": 2021,
"tenure_id": 1,
"leave_name": "test",
"leaves": "25",
"lates": "0",
"leave_id": 16,
"assigned_quota": 50,
"available_quota": "4",
"is_default_leave": 0,
"exceeding": 21
},
{
"employee_id": 15,
"organization_id": 1,
"year": 2021,
"tenure_id": 1,
"leave_name": "Annual Leaves",
"leaves": 25,
"lates": "0",
"leave_id": 1,
"assigned_quota": 99,
"available_quota": "9",
"is_default_leave": 1,
"exceeding": 16
}
know I want it to like this when it merge:
{
"employee_id": 15,
"organization_id": 1,
"year": 2021,
"tenure_id": 1,
"leaves": [
{
"leave_name": "Annual Leaves",
"leaves": 25,
"lates": "0",
"leave_id": 1,
"assigned_quota": 99,
"available_quota": "9",
"is_default_leave": 1,
"exceeding": 16
},
{
"leave_name": "test",
"leaves": "25",
"lates": "0",
"leave_id": 16,
"assigned_quota": 50,
"available_quota": "4",
"is_default_leave": 0,
"exceeding": 21
}
]
}
I have tried using groupby with "employee_id" however it but it gives data with id as parent and and array inside which I dont want anyone here please explain how can I achieve this.
CodePudding user response:
merge method returns merged collection
$c1 = new Collection(['foo']);
$c2 = new Collection(['bar']);
$merged = $c1->merge($c2); // Contains foo and bar.
$c1 = CollectionA::all();
$c2 = CollectionB::all();
$merged = $c1->merge($c2);
CodePudding user response:
Not sure the builting collection methods will do that for you, but some simple PHP code will
$jstring = '[{
"employee_id": 7, "organization_id": 1, "year": 2021,
"tenure_id": 1, "leave_name": "Annual Leaves", "leaves": 26,
"lates": "1", "leave_id": 1, "assigned_quota": 99,
"available_quota": "12", "is_default_leave": 1, "exceeding": 14
},
{
"employee_id": 15, "organization_id": 1, "year": 2021,
"tenure_id": 1, "leave_name": "test", "leaves": "25",
"lates": "0", "leave_id": 16, "assigned_quota": 50,
"available_quota": "4", "is_default_leave": 0, "exceeding": 21
},
{
"employee_id": 15, "organization_id": 1, "year": 2021,
"tenure_id": 1, "leave_name": "Annual Leaves", "leaves": 25,
"lates": "0", "leave_id": 1, "assigned_quota": 99,
"available_quota": "9", "is_default_leave": 1, "exceeding": 16
}]';
$json = json_decode($jstring);
$merged = [];
foreach ($json as $jobj){
if ( array_key_exists($jobj->employee_id, $merged) ) {
// we saw this one before so add to the employee's leaves array
$merged[$jobj->employee_id]->leaves[] = [ "leave_name" => $jobj->leave_name,
"leaves" => $jobj->leaves,
"lates" => $jobj->lates,
"leave_id" => $jobj->leave_id,
"assigned_quota" => $jobj->assigned_quota,
"available_quota" => $jobj->available_quota,
"is_default_leave" => $jobj->is_default_leave,
"exceeding" => $jobj->exceeding
];
} else {
$leaves = [ "leave_name" => $jobj->leave_name,
"leaves" => $jobj->leaves,
"lates" => $jobj->lates,
"leave_id" => $jobj->leave_id,
"assigned_quota" => $jobj->assigned_quota,
"available_quota" => $jobj->available_quota,
"is_default_leave" => $jobj->is_default_leave,
"exceeding" => $jobj->exceeding
];
$obj = new stdClass;
$obj->employee_id = $jobj->employee_id;
$obj->organization_id = $jobj->organization_id;
$obj->year = $jobj->year;
$obj->tenure_id = $jobj->tenure_id;
$obj->leaves[] = $leaves;
$merged[$jobj->employee_id] = $obj;
}
}
print_r($merged);
RESULTS
Array (
[7] => stdClass Object (
[employee_id] => 7
[organization_id] => 1
[year] => 2021
[tenure_id] => 1
[leaves] => Array (
[0] => Array (
[leave_name] => Annual Leaves
[leaves] => 26
[lates] => 1
[leave_id] => 1
[assigned_quota] => 99
[available_quota] => 12
[is_default_leave] => 1
[exceeding] => 14
)
}
)
[15] => stdClass Object (
[employee_id] => 15
[organization_id] => 1
[year] => 2021
[tenure_id] => 1
[leaves] => Array (
[0] => Array {
[leave_name] => test
[leaves] => 25
[lates] => 0
[leave_id] => 16
[assigned_quota] => 50
[available_quota] => 4
[is_default_leave] => 0
[exceeding] => 21
)
[1] => Array (
[leave_name] => Annual Leaves
[leaves] => 25
[lates] => 0
[leave_id] => 1
[assigned_quota] => 99
[available_quota] => 9
[is_default_leave] => 1
[exceeding] => 16
)
)
)
)
