Я немного искал, но не нашел ничего, что бы точно соответствовало тому, что я ищу, и ничего, что действительно помогло бы мне достичь того, что я хотел бы.
У меня есть данные в этом формате из БД:
[
{
"datetime": "20170208183021",
"ping": "11.201858520507812",
"download": "28129628.324328355",
"upload": "65169139.37489863"},
{
"datetime": "20170208181514",
"ping": "7.826685905456543",
"download": "300487650.87967044",
"upload": "128210163.86553746"},
{
"datetime": "20170208180034",
"ping": "19.550085067749023",
"download": "17300126.504837424",
"upload": "16650978.464359928"}
]
Я хотел бы преобразовать все это в этот формат:
{
"datetime": [
"20170208183021",
"20170208181514",
"20170208180034"],
"ping": [
"11.201858520507812",
"7.826685905456543",
"19.550085067749023"],
"download": [
"28129628.324328355",
"300487650.87967044",
"17300126.504837424"],
"upload": [
"65169139.37489863",
"128210163.86553746",
"16650978.464359928"]
}
Я предполагаю, что лучший способ — использовать карту, но я не был уверен, как. Любая помощь будет оценена.
Вот рабочий пример. Вам не нужно ничего причудливого, простого foreach
сделает свое дело.
$json = <<<EOS
[
{
"datetime": "20170208183021",
"ping": "11.201858520507812",
"download": "28129628.324328355",
"upload": "65169139.37489863"},
{
"datetime": "20170208181514",
"ping": "7.826685905456543",
"download": "300487650.87967044",
"upload": "128210163.86553746"},
{
"datetime": "20170208180034",
"ping": "19.550085067749023",
"download": "17300126.504837424",
"upload": "16650978.464359928"}
]
EOS;
$array = \json_decode($json, true);
$results = [
'datetime' => [],
'ping' => [],
'download' => [],
'upload' => [],
];
foreach ($array as $value) {
$results['datetime'][] = $value['datetime'];
$results['ping'][] = $value['ping'];
$results['download'][] = $value['download'];
$results['upload'][] = $value['upload'];
}
$results = \json_encode($results, JSON_PRETTY_PRINT);
echo $results;
Это JSON, поэтому предположим, что вы декодируете его как массив:
$array = json_decode($json, true);
Чтобы построить его динамически, независимо от количества ключей, просто зациклите один, чтобы получить имена ключей и извлечь их:
foreach($array[0] as $key => $val) {
$result[$key] = array_column($array, $key);
}
Более длинный путь вокруг:
foreach($array as $values) {
foreach($values as $key => $val)
$result[$key][] = $val;
}
Это будет объект при кодировании:
$array = json_encode($result);