Я думаю, как сгруппировать мой массив объектами с одинаковым значением.
У меня есть результат 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);