I have a JSON array and I need to change that into another array format. Please look into the following data:
{
"BUS NO.1": [
{"trip":"Trip00011","runningKm": "5000"},
{"trip":"Trip00012","runningKm":"2565"}
],
"BUS NO.2":[
{"trip":"Trip00021","runningKm": "2400"},
{"trip":"Trip00023","runningKm":"1500"},
{"trip":"Trip00025","runningKm":"3000"}
]
}
Desired result:
{
"data": [
{
"y": "BUS NO.1",
"Trip00011": "5000",
"Trip00012": "2565"
},
{
"y": "BUS NO.2",
"Trip00021": "2400",
"Trip00023": "1500",
"Trip00025": "3000"
}
]
}
Try this one. You'll only need 1 loop and an array_merge.
$originalData = [
[
'vehicle' => 'BUS NO.1',
'trip_name' => 'Trip00011',
'running_km' => '5000'
],
[
'vehicle' => 'BUS NO.2',
'trip_name' => 'Trip00021',
'running_km' => '2400'
],
[
'vehicle' => 'BUS NO.2',
'trip_name' => 'Trip00023',
'running_km' => '1500'
],
];
$responseData = [];
foreach ($originalData as $od){
$temp = [
'y' => $od['vehicle'],
];
$temp[$od['trip_name']] = $od['running_km'];
if (!isset($responseData[$od['vehicle']])){
$responseData[$od['vehicle']] = $temp;
} else {
$responseData[$od['vehicle']] = array_merge($responseData[$od['vehicle']], $temp);
}
}
echo json_encode(array_values($responseData));
Output (JSON): [{"y":"BUS NO.1","Trip00011":"5000"},{"y":"BUS NO.2","Trip00021":"2400","Trip00023":"1500"}]