#php #laravel
#php #laravel
Вопрос:
Я хочу получить данные о количестве имен за последний месяц из базы данных с помощью php.
Я сохраняю поле данных, как показано ниже:
{
"2019-04-11": [
"alex",
"jhon",
"vinu"
],
"2019-04-12": [
"Mario",
"pech"
]
}
Комментарии:
1. Можете ли вы показать нам свои усилия / фрагменты, которые вы пробовали до сих пор?
2. Какие запросы вы пробовали и какую ошибку они выдают? Как вы думаете, что вы делаете не так? Покажите нам, что вы хотя бы пытались…
3. Я не пробовал.
Ответ №1:
Если я понимаю ваш вопрос, следующий подход может помочь.
- Декодируйте свои
JSON
данные в массив с помощью json_decode(). Результатом будет массив с датами в качестве ключей и именами в качестве значений. - Цикл генерирует этот массив, преобразует ключ в date с помощью DateTime::createFromFormat(), сравнивает даты и подсчитывает имена:
PHP:
<?php
# JSON
$json = '
{
"2019-04-11": [
"alex",
"jhon",
"vinu"
],
"2019-04-12": [
"Mario",
"pech"
]
}
';
$data = json_decode($json, true);
# Count names
$count = 0;
foreach ($data as $key => $value) {
$date = DateTime::createFromFormat('Y-m-d', $key);
if ($date->format('Y-m') == '2019-04') {
$count = count($value);
}
}
# Output
echo 'Count: '.$count;
?>
Ответ №2:
Попробуйте с этим,
Сначала разделите вашу пару ключ-значение на два массива, используя array_divide()
Приведенный ниже код вернет вам месяц
explode('-',array_divide($arr)[0][0])[1]
explode принимает только строку, поэтому она помещается в это место
array_divide($arr)[0][0]
explode разделит массив из -, а месяц занимает второе место, что означает 1 индекс.
и он вернет количество
count(array_divide($arr)[1][0])
Считайте $arr
, что равно вашей переменной.
Надеюсь, это поможет 🙂