Имеется массив с timestamp-ми примерно с прошлого года (когда добавлялись пользователи). Надумала сделать статистику, но не пойму как можно день за днем отсортировать этот массив, чтобы вышло что-то типа
[
'27.05.18' => 25,
'28.05.18' => 5
]
Где 25 и 5 - соответственно количество пользователей за день. У меня же имеется просто список
["1597770786","1597771694","1597771715","1597776373","1597776819"],
Что-то мне подсказывает, что информация о зарегистрированных пользователях хранится вовсе не в текстовом файле. Скорее всего - в базе данных. Так почему бы не получить эти данные сразу запросом из БД? Например, если registered_at - поле типа TIMESTAMP, то запрос будет выглядеть как-то так:
SELECT
DATE_FORMAT(registered_at, '%d.%m.%Y') AS registerDate,
COUNT(*) AS usersCount
FROM users
GROUP BY DATE_FORMAT(registered_at, '%d.%m.%Y')
ORDER BY DATE_FORMAT(registered_at, '%d.%m.%Y');
Ну а если registered_at - это поле типа INTEGER, хранящее unix timestamp, то запрос будет имет примерно такой вид:
SELECT
FROM_UNIXTIME(registered_at, '%d.%m.%Y') AS registerDate,
COUNT(*) AS usersCount
FROM users
GROUP BY FROM_UNIXTIME(registered_at, '%d.%m.%Y')
ORDER BY FROM_UNIXTIME(registered_at, '%d.%m.%Y');
И выполнится быстрее, и возни меньше, и последующая обработка проще - данные уже отсортированы, сгруппированы и готовы к помещению в массив:
$result = [];
foreach ($pdo->query($sql) as $row) {
$result[$row['registerDate']] = $row['usersCount'];
}
P.S. Варианты запроса представлены для MySQL.
Например так:
$arr = ["1597770786","1597771694","1597771715","1564404622","1597776819"];
$result = [];
foreach($arr as $row){
$date = date('d.m.Y', $row);
isset($result[$date]) ? $result[$date]++ : $result[$date] = 1;
}
Предлагаю, для определения количества одинаковых значений в массиве, использовать ф-ю array_count_values().
Тогда задача сводится к преобразованию значений массива в строки, содержащих дату в формате "d.m.Y" и последующий подсчет, с помощью функции array_count_values()
, кол-ва одинаковых значений:
<?php
$input = ["1597610786", "1597611786", "1597770786", "1597771694", "1597771715", "1597776373", "1597776819" ];
sort($input); // <--- если значения уже отсортированны - строчку можно удалить
$output = array_count_values(
array_map(
function ($itm) {
return date('d.m.Y', $itm);
},
$input
)
);
var_dump($output);
Вывод:
array(2) {
'16.08.2020' =>
int(2)
'18.08.2020' =>
int(5)
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть база данных где есть 5 строк, каждая запись из бд идет на сайт в каждый фиелдсет, но когда нажимаю
проблема такова есть сайт , в нем категории , ссылка выглядит таким siteru/category-/category-b/category-c/postname, нужно чтобы она была вида site
Почему этот код работает $dest_url = get_home_path()"imagebase/1/"
Первая половина кода срабатывает, а код ниже (INSERT INTO) выдает ошибку запроса