Как получить такой результат в json?

Как получить такой результат в json? Через php и/или js.

введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: UKRman

Вот с помощью php можете использовать ваш с мапить массив, вам нужно только заделать выборку в виде ассоциативного массива:

[
    ...
    [
        'id'        => 1,
        'firstname' => 'Olex',
        'lastname'  => 'Olex',
        'subject'   => 'Moskva'
    ],
    ...
],
$rows = "SELECT * FROM yourtable"; // Ваша выборка всех строк в PDO, mysqli_query и тд. в формате асоцеативного асива

$arrayMap['subject'] = [];
foreach ($rows as $item) {
    $filter = array_filter(
        $arrayMap['subject'],
        function ($map) use ($item) {
            if ($map['subject_title'] === $item['subject']) {
                return $map;
            }
        }
    );

    if (empty($filter) === true) {
        $arrayMap['subject'][] = [
            'subject_title' => $item['subject'],
            'candidats'     => [
                [
                    'id'   => $item['id'],
                    'name' => $item['firstname'],
                ]
            ]
        ];

        continue;
    }

    $arrayMap['subject'][key($filter)]['candidats'][] = [
        'id'   => $item['id'],
        'name' => $item['firstname'],
    ];
}

var_dump(json_encode($arrayMap));

Массив на выходе. вывод результата в виде масива

Буду рад если кто-то сделает оптимальней скрипт.

→ Ссылка