Используйте данные подмассива из json для создания строк ассоциативных массивов

Я хочу сопоставить свой ответ JSON с конкретной конструкцией массива.

Вот мои данные JSON вкратце:

"code": 200,
"unit": null,
"data": [
    {
        "2022-11-16": 185.6159202
    },
    {
        "2022-11-17": 204.31997631
    },...
]

Мне нужна помощь, чтобы сопоставить эти данные, чтобы иметь структуру массива, как показано ниже:

Array ( 
    [0] => Array(
        [date] => 2018-01-03
        [value] => 0.0002444
    )
[1] => Array(
        [date] => 2018-01-04
        [value] => 0.0171476
    )
)

Мой код в PHP:

$decoded = json_decode($json, true);
$arr = $decoded['data'];

После этого структура массива выглядит так, что не совсем то, что я ожидаю:

Array ( 
    [0] => Array ( [2018-01-03] => 0.0002444 ) 
    [1] => Array ( [2018-01-04] => 0.0171476 )
)
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Еженедельник новостей для разработчиков - выпуск №10
Еженедельник новостей для разработчиков - выпуск №10
В выпуске этой недели собраны самые интересные статьи и новости, отобранные из всего контента, опубликованного за предыдущую неделю на сайте...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование array_keys() и array_values() не является идеальным/оптимальным подходом, потому что это создает ненужную глубину при доступе к данным. Видите, как нужно писать [0] после каждого звонка? Не рекомендуется создавать временный массив, если вы собираетесь получить доступ только к первому элементу из него. Просто используйте key() и current() (или reset()).

Программирование в функциональном стиле с array_map(): (Демо)

var_export(
    array_map(
        fn($item) => ['date' => key($item), 'value' => current($item)],
        json_decode($json, true)['data']
    )
);

Классический foreach(): (Демо)

$result = [];
foreach (json_decode($json, true)['data'] as $item) {
    $result[] = ['date' => key($item), 'value' => current($item)];
}
var_export($result);

Или с меньшим количеством повторных вызовов функций: (Demo)

$result = [];
foreach (json_decode($json, true)['data'] as $item) {
    $key = key($item);
    $result[] = ['date' => $key, 'value' => $item[$key]];
}
var_export($result);

Или с compact(): (Демо)

$result = [];
foreach (json_decode($json, true)['data'] as $item) {
    foreach ($item as $date => $value) {
        $result[] = compact(['date', 'value']);
    }
}
var_export($result);

Другие вопросы по теме