Вот, пожалуйста (не проверено):
foreach ($items as $item) {
//just because I can (use array key for ease of accessing it)
$key = preg_replace('/-\d{2}$/', '', $item['date']);
//you can use this instead if you want.
//$key = date('Y-m', strtotime($item->date));
//we can join our ifs tougher as the deal with the same elements
//and this will make the code more efficient
if(!isset($chart[$key])){
//add $key as month
$chart[$key] = array('penalty'=>0, 'warning'=>0, 'month'=>$key);
}else if ($item->amount > 0) {
$chart[$key]['penalty'] += $item->count;
} else {
$chart[$key]['warning'] += $item->count;
}
}
//may want to put the proper content type
//this tells the ajax call what it is and will parse it
//automatically in most browsers, so you can toss that JSON.parse().
//CAUTION:do not output data before a header call
//header('Content-type: application/json');
//array_values removes the date key, its easier to built array with it.
//then we just output the json
echo json_encode(array_values($chart));
Тест регулярных выражений
Regex
-
соответствует -
буквально
\d
соответствует любой цифре
{2}
ровно 2 раза
$
соответствует концу строки.
Короче говоря, он заменяет деталь 2018-08 -31
. Используйте функцию даты, если вы уверены, что она всегда будет действительной датой. Вы можете использовать регулярное выражение, если это не так или вы не хотите использовать дату ...
В качестве примечания я бы проверил, если бы вы использовали var_export
вместо print_r
для вывода данных, потому что мне лень форматировать их. На днях я напишу что-нибудь, чтобы преобразовать это для меня.
В качестве примечания второй стороны я добавил заголовок (в комментариях), если ваши данные неправильно анализируются обратным вызовом ajax, то вы можете использовать его, и он должен получиться как объект, как и предполагалось. Тем не менее, некоторые старые браузеры могут иметь проблемы с этим, такие как IE8, может быть, IE9 тоже и т. Д. Поскольку они не понимают это, они могут попытаться загрузить файл JSON. Так что это зависит от того, планируете ли вы их поддерживать.
Приветствие.