Laravel: Подсчет целочисленного значения внутри массива из JSON - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь посчитать целочисленное значение из JSON: https://pomber.github.io/covid19/timeseries.json, но я получил 1 для каждого ключа. Я ожидаю, что в качестве ключа будет подсчитано общее «подтвержденное» из всех стран по дате.

Вот мой контроллер:

$client = new Client();$request = $client->get('https://pomber.github.io/covid19/timeseries.json');
$response = $request->getBody()->getContents();
$posts_dates = json_decode($response, true);

$confirmed_array = array();

if ( ! empty( $posts_dates ) ) {
    foreach ( $posts_dates as $key => $val ) { 
        foreach ( ((array)$posts_dates)[$key] as $data ) {
            $date_confirmed = new \DateTime( $data['date'] );
            $day = $date_confirmed->format( 'd M y' );
            $confirmed = count((array)$data['confirmed']);
            $confirmed_array [ $day ] = $confirmed;
        }

    } 
}
return $confirmed_array;

Вот результат:

{
"22 Jan 20": 1,
"23 Jan 20": 1,
"24 Jan 20": 1,
"25 Jan 20": 1,
"26 Jan 20": 1,
"27 Jan 20": 1,
"28 Jan 20": 1,
"29 Jan 20": 1,
"30 Jan 20": 1,
"31 Jan 20": 1,
....
}

ОБНОВЛЕНИЕ

Я хочу, чтобы вывод выглядел следующим образом:

{
  "date": [
     "22 Jan 20",
     "23 Jan 20",
     "24 Jan 20",
     "25 Jan 20",
     .....
   ],
  "total_confirmed": [
     555,
     653,
     941,
     1434,
     .....
   ],
   "max_value_of_total_confirmed": 12214
}

Любая помощь будет оценена:)

1 Ответ

1 голос
/ 20 марта 2020

Этот код просто циклически просматривает данные каждой страны и затем для каждой даты добавляет данные в массив результатов ...

foreach ( $posts_dates as $country => $data )   {
    foreach ( $data as $date => $dateData )    {
        if ( !isset($confirmed_array[$dateData['date']]) )  {
            $confirmed_array[$dateData['date']] = 0;
        }
        $confirmed_array[$dateData['date']] += $dateData['confirmed'];
    }
}

Обновление:

Для нового формата вы пока нужно просто извлечь данные из массива ...

$output = ["date" => array_keys($confirmed_array),
    "total_confirmed" => array_values($confirmed_array),
    "max_value_of_total_confirmed" => max($confirmed_array)
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...