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"}
]

3

Решение

Исходя из структуры, изложенной в вопросе:

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

$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"}
]
}
5

Другие решения

ИМЯ РАБОТНИКА 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);
1

По вопросам рекламы [email protected]