Rana Haseeb
Rana Haseeb

Reputation: 13

not getting proper JSON data in php

$events = array();
$employeeData = array();
foreach ($rows as $fetch)
{ 
    $employeeData['start_date'] = $fetch->start_date;
    $employeeData['events']['start_time'] = $fetch->start_time;
    $employeeData['events']['end_time'] = $fetch->end_time;

    $employeeData['events']['name'] = $fetch->FirstName. ' ' .$fetch->LastName;

   array_push($events, $employeeData);
}

$success_status = array(
    'events'=> $events
);

echo json_encode($success_status, true);

Result------------

{ "events": [{ "start_date": "2018-05-27", "events": { "start_time": "11:45:00", "end_time": "13:00:00", "name": "Demo" } }, { "start_date": "2018-06-29", "events": { "start_time": "15:30:00", "end_time": "15:45:00", "name": "Demo" } }, { "start_date": "2018-06-29", "events": { "start_time": "16:30:00", "end_time": "23:45:00", "name": "Demo" } }] }

I am getting the above result but I need to get the following result

{ "events": [{ "start_date": "2018-05-27", "events": [{ "start_time": "11:45:00", "end_time": "13:00:00", "name": "Demo" }] }, { "start_date": "2018-06-29", "events": [{ "start_time": "15:30:00", "end_time": "15:45:00", "name": "Demo" }, { "start_time": "16:30:00", "end_time": "23:45:00", "name": "Demo" }] }] }

Upvotes: 0

Views: 38

Answers (2)

matt
matt

Reputation: 700

$employeeData['events']['start_time'] basically is creating a single item as an associative array. What you want is an array of event items. So you need to put the event data into an array, then add that array to your events array, like this:

$events = array();
$employeeData = array();
foreach ($rows as $fetch)
{ 
    $event = [];
    $employeeData['start_date'] = $fetch->start_date;
    $event['start_time'] = $fetch->start_time;
    $event['end_time'] = $fetch->end_time;

    $event['name'] = $fetch->FirstName. ' ' .$fetch->LastName;
    $employeeData['events'][] = $event;

   array_push($events, $employeeData);
}

$success_status = array(
    'events'=> $events
);

echo json_encode($success_status, true);

Upvotes: 0

Nigel Ren
Nigel Ren

Reputation: 57121

I think this should produce the output your after, it's a case of adding an extra layer of arrays to the data you want nested in [{...}]...

$employeeData['events'][] = ['start_time' => $fetch->start_time, 
                             'end_time' =>$fetch->end_time,
                             'name' => $fetch->FirstName. ' ' .$fetch->LastName ];

So this uses [] to just add the data to an array and I've wrapped the elements into one array rather than adding it as items.

Upvotes: 1

Related Questions