Как посчитать количество дат в массиве?

198
15 октября 2017, 23:56

Есть массив (результат вывода var_dump):

array(50) { 
[0]=> array(1) { ["x"]=> string(10) "2017-09-21" } 
[1]=> array(1) { ["x"]=> string(10) "2017-09-22" } 
[2]=> array(1) { ["x"]=> string(10) "2017-09-22" } 
[3]=> array(1) { ["x"]=> string(10) "2017-09-23" } 
[4]=> array(1) { ["x"]=> string(10) "2017-09-23" } 
[5]=> array(1) { ["x"]=> string(10) "2017-09-23" } 
[6]=> array(1) { ["x"]=> string(10) "2017-09-24" } 
[7]=> array(1) { ["x"]=> string(10) "2017-09-24" } 
[8]=> array(1) { ["x"]=> string(10) "2017-09-25" } 
[9]=> array(1) { ["x"]=> string(10) "2017-09-25" } 
[10]=> array(1) { ["x"]=> string(10) "2017-09-26" } 
[11]=> array(1) { ["x"]=> string(10) "2017-09-26" } 
[12]=> array(1) { ["x"]=> string(10) "2017-09-27" }  
} 

Пробовал через array_count_values посчитать сколько всего значений определенной даты в массиве. Т.е за 21 число -1 , за 22 - 2 и так далее.. Все попытки спотыкаются на ошибке array_count_values(): Can only count STRING and INTEGER values

Как перевести значения даты в массиве в тип, который поймет array_count_values и в итоге решить задачу?

Answer 1

Если массив не слишком велик чтобы беспокоиться о размере выделяемой памяти под временный массив между вызовами штатных функций, то простой и компактный вариант решения:

$result = array_count_values(array_column($input, 'x'))

Для более объёмных вещей (или для поддержки музейный версий PHP, array_column появился лишь с версии 5.5) возможно сделать вычисление за один проход по исходному массиву с использованием памяти только под результирующий список:

$result = [];
foreach ($input as $row) {
    if (! isset($result[ $row['x'] ])) {
        $result[ $row['x'] ] = 0;
    }
    ++$result[ $row['x'] ];
}
READ ALSO
Почему не выводит в QTextBrowser?

Почему не выводит в QTextBrowser?

Здравствуйте! Подскажите пожалуйста, почему в незакоментированном коде выводит как в qDebug() так и в QTextBrowser, а в закоментированном варианте...

232
Создание собственной WM на SDL

Создание собственной WM на SDL

Добрый день вопрос такой, можно ли написать на C SDL свою WM? я попытался (ниже примерный код) сделать тестовую приложуху и запустить ее в место...

258
Как в с++ сравнивать значения строки [требует правки]

Как в с++ сравнивать значения строки [требует правки]

Надо найти в коде все числа из 10-ной СИ (в тесте ввод только 10-ных) и заменить их на числа из 2-ной СИПри чем десятичные числа идут вперемешку...

322
C++ задачка на строки [требует правки]

C++ задачка на строки [требует правки]

Пароль называется криптостойким, если он включает в себя и строчные латинские буквы, и заглавные латинские буквы, и цифры, при этом его длина...

432