我正在使用ChartJS创建历史图表。而且我需要过滤30天前的数组值
我有一个数组,其值如下:
[0] => Array
(
[datetime] => 4/1/2019 4:00:00 PM - 5:00:00 PM
[value_raw] => 100
)
[1] => Array
(
[datetime] => 4/1/2019 3:00:00 PM - 4:00:00 PM
[value_raw] => 101
)
[2] => Array
(
[datetime] => 4/1/2019 2:00:00 PM - 3:00:00 PM
[value_raw] => 99
)
该数组内容丰富,每天每天每小时包含的时间超过5个月以上
这是我目前在ChartJS脚本中用于标签的当前php代码:
标签代码:
labels: [
<?php
for($i=0; $i<=30; $i++)
{
$label = date('n/d/Y', strtotime('-'.$i.' days',strtotime(date('n/d/Y'))));
echo '"'.$label.'",';
}
?>
],
结果:
4/01/2019, 3/31/2019, 3/30/2019, 3/29/2019
但是,我很难在与标签代码并行/匹配的情况下每天获得等效的MAX值。
数据代码:
data: [
<?php
foreach ($my_array as $key => $value) {
for($i=0; $i<=30; $i++)
{
$label = date('n/d/Y', strtotime('-'.$i.' days',strtotime(date('n/d/Y'))));
if ($label == changeFormat($value[datetime]))
{
echo $value['value_raw'].',';
}
}
}
?>
],
我的预期结果应该是过去30天的最大值:
示例:
DATE VALUE
4/01/2019 99
3/31/2019 101
3/30/2019 100
3/29/2019 95
结果:
99, 101, 100, 95
答案 0 :(得分:0)
$today= date('Y-m-d');
$thirty_days_ago = date('Y-m-d', strtotime('-30 days'));
然后,在数据库查询构建器中,
$data = DB::table('your_table_name')
->where('datetime','>='$thirty_days_ago)
->where('datetime','<='$today)
->whereRaw('value_raw = (select max(`value_raw`) from your_table_name)')
->select('datetime','value_raw')
->groupBy('datetime')->get();
答案 1 :(得分:0)
如果您正在使用mysql按日期分组并获取最大值,则可以触发查询
SELECT MAX(value_raw), DATE(mydate) DateOnly FROM a_table where mydate BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW() GROUP BY DateOnly;
答案 2 :(得分:0)
由于问题是关于根据键对多维数组进行排序,因此请尝试
/--1--\ /--0--\
| \ | |
V | V |
--->(q1)-1->(q2)-0->(q3)-\
| ^ \
0 | /
| \-1-/
V
(q4)-\
^ \
| /
\0,1/
答案 3 :(得分:0)
嗨,这是我想出的:
data: [
<?php
for($i=0; $i<=7; $i++)
{
$date = date('n/j/Y', strtotime('-'.$i.' days',strtotime(date('n/d/Y'))));
$filterBy = $date;
$new_array = array_filter($my_array, function ($array) use ($filterBy) {
$datetime = date("n/j/Y",changeFormat($array['datetime']));
if ($datetime == $filterBy)
{
return $datetime;
}
});
if (count($new_array) != 0)
{
$max_value = max(array_column($new_array, 'value_raw'));
echo number_format($max_value, 0, '.', '').",";
}
}
?> ],