Есть массив формата
Array
(
[0] => Array
(
[date] => 01.09.2016
[sum] => 450
)
[1] => Array
(
[date] => 31.08.2016
[sum] => 156
)
[2] => Array
(
[date] => 02.09.2016
[sum] => 888
)
[3] => Array
(
[date] => 02.09.2016
[sum] => 388
)
[4] => Array
(
[date] => 02.09.2016
[sum] => 488
)
[5] => Array
(
[date] => 02.09.2016
[sum] => 858
)
[6] => Array
(
[date] => 02.12.2016
[sum] => 450
)
)
Как я могу его отсортировать по датам и для каждой даты сделать массив с ключем даты и записать количество заказов в этот день, например для 02.09.2016
[02.09.2016] => Array
(
[count] => 4 /*Количество массивов с одинаковой датой***/
)
И так для всех дат в массиве
Можете сделать так:
<?php
$data = array();
$array = array(
array(
'date' => '05.09.2016',
'sum' => 470,
),
array(
'date' => '11.11.2016',
'sum' => 470,
),
array(
'date' => '05.09.2016',
'sum' => 100,
),
array(
'date' => '01.09.2016',
'sum' => 490,
),
array(
'date' => '10.10.2016',
'sum' => 550,
),
);
foreach ( $array as $row ) {
$key = $row[ 'date' ];
$val = $row[ 'sum' ];
if ( array_key_exists( $key, $data ) ) {
$data[ $key ] += $val;
} else {
$data[ $key ] = $val;
}
}
ksort( $data );
print_r( $data );
/*
Array
(
[01.09.2016] => 490
[05.09.2016] => 570
[10.10.2016] => 550
[11.11.2016] => 470
)
*/
Но я бы посоветовал сравнивать даты в UNIX формате, для этого надо не полениться и сделать ещё пару for
))
Если вас интересует только количество заказов, то для этих целей есть функция array_count_values
, останется отсортировать результат по ключам, переведя их в даты из строк.
$result = array_count_values(array_column($data, 'date'));
uksort($result, function($a,$b){ return strtotime($a) - strtotime($b);});
print_r($result);
Можно также изначально даты перевести к меткам времени, а потом подсчитать. Тогда достаточно будет обычной сортировки по ключам.
$result = array_count_values(array_map("strtotime", array_column($data, 'date')));
ksort($result);
а метки уже потом преобразовать к виду строковых да при необходимости.
Возможно, если массив получен из БД, вам вообще стоит сделать всю работу на уровне СУБД: select date, count(*) from data order by date
?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь сделать возможность удалять вложения перед отправкой, и потом отправитьРеализацию нашел, но требуется помощь
Как вывести документ Excel на сайте? Документ имеет большую таблицу