PHP JSON Array – группа с одинаковым значением

Я думаю, как сгруппировать мой массив объектами с одинаковым значением.

У меня есть результат MySQL запроса:

Date StartTime EndTime 2014-12-01 08:00 12:00 2014-12-01 10:00 16:00 2014-12-02 12:00 18:00 2014-12-03 10:00 20:00 

У меня эти данные в переменной PHP, называемой $Data .

Возможно ли получить такой массив json с помощью php😕

 [ { "2014-12-01": [ { "StartTime": "08:00", "EndTime": "12:00" }, { "StartTime": "10:00", "EndTime": "16:00" } ] }, { "2014-12-02": [ { "StartTime": "12:00", "EndTime": "18:00" } ] }, { "2014-12-03": [ { "StartTime": "10:00", "EndTime": "20:00" } ] } ] 

Если я использую echo json_encode($Data) , результатом будет:

 [ { "Date": "2014-12-01", "StartTime": "10:00", "EndTime": "16:00" }, { "Date": "2014-12-02", "StartTime": "12:00", "EndTime": "18:00" }, { "Date": "2014-12-03", "StartTime": "10:00", "EndTime": "20:00" } ] 

На основе структуры, изложенной в вопросе:

Требуется php 5.4+ для json pretty printing, если вы используете более низкую версию, просто удалите ее и используйте формат длинного массива.

 $in = <<<'JSON' [ { "Date": "2014-12-01", "StartTime": "10:00", "EndTime": "16:00" }, { "Date": "2014-12-02", "StartTime": "12:00", "EndTime": "18:00" }, { "Date": "2014-12-03", "StartTime": "10:00", "EndTime": "20:00" }, { "Date": "2014-12-03", "StartTime": "12:00", "EndTime": "20:00" } ] JSON; $data = json_decode($in, true); $out = []; foreach($data as $element) { $out[$element['Date']][] = ['StartTime' => $element['StartTime'], 'EndTime' => $element['EndTime']]; } var_dump(json_encode($out, JSON_PRETTY_PRINT)); 

Чтобы получить тот же результат, что и в вопросе (возвращаемый вывод, заключенный в один элемент json-array, вам нужно будет обернуть $out в другом массиве, подобном этому:

json_encode([$out], JSON_PRETTY_PRINT)

Результаты в:

 { "2014-12-01": [ { "StartTime": "10:00", "EndTime": "16:00" } ], "2014-12-02": [ { "StartTime": "12:00", "EndTime": "18:00" } ], "2014-12-03": [ { "StartTime": "10:00", "EndTime": "20:00" }, { "StartTime": "12:00", "EndTime": "20:00" } ] } 

ИМЯ РАБОТНИКА DATA_PATH Alp 1. video_link 2. video_link Xyz 1. video_link 2. video_link 3. video_link

 $stmt = $this->conn->prepare("SELECT a.employer_name,b.data_path FROM rec_experience a INNER JOIN rec_multi_upload_data b ON(a.rec_uniqueid=b.rec_id) WHERE b.data_type='Video' ORDER BY a.c_date DESC "); $stmt->execute(); $res = $stmt->fetchAll(PDO::FETCH_ASSOC); $out = []; foreach($res as $element) { $out[$element['employer_name']][] = ['video_link' => $element['data_path']]; } echo json_encode($out);