我正在使用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
然而,我有困难的时候,我如何才能得到每天的最大价值,同时/匹配我的标签代码。
数据代码:
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
如果您使用mysql按日期分组并获得最大值,则可以触发查询,
SELECT MAX(value_raw), DATE(mydate) DateOnly FROM a_table where mydate BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW() GROUP BY DateOnly;
$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();
由于问题是关于基于键对多元数组进行排序,请尝试以下操作
// remove dates older than 30 days
function remove30DayBeforeDates($a) {
$pieces = explode(' ', $a['datetime']);
return strtotime($pieces[0]) > strtotime('-30 days');
}
// remove dates older than 30 days
$array = array(
array(
'datetime' => '3/29/2019 4:00:00 PM - 5:00:00 PM',
'value_raw' => 95
), array(
'datetime' => '4/01/2019 3:00:00 PM - 4:00:00 PM',
'value_raw' => 99
), array(
'datetime' => '3/31/2019 2:00:00 PM - 3:00:00 PM',
'value_raw' => 101
), array(
'datetime' => '2/10/2019 2:00:00 PM - 3:00:00 PM',
'value_raw' => 112
), array(
'datetime' => '3/30/2019 2:00:00 PM - 3:00:00 PM',
'value_raw' => 100
));
$array = array_filter($array, "remove30DayBeforeDates");
// sort array based on the date
function check($a, $b) {
$pieces1 = explode(' ', $a['datetime']);
$pieces2 = explode(' ', $b['datetime']);
return strtotime($pieces2[0]) <=> strtotime($pieces1[0]); // use spaceship operator
}
// sort array based on the date
usort($array, "check");
$value_raw = array_column($array, 'value_raw'); // get array of values from column "value_raw"
print_r(implode(',',$value_raw));
问题内容: 我正在尝试为多维数组中的特定键选择最大值。我无法“找到”有问题的钥匙… 因此,数组(比我在这里发布的要冗长得多) 我试图在整个数组中找到最大的“ dnum”值,因此在此示例中,$ max =2。我知道max函数允许我执行此操作,但是我不确定如何引用dnum。元素而不将整个对象放入foreach循环中,如果我这样做了,那么max不会成为要使用的函数,对吗? 因此,我无法完全做到这一点:
问题内容: 好的,所以我有一个二维数组z [50][50],因此z的大小是50*50,但是如果我说z.length,我只能得到50。如何获得2D数组的实际大小? 问题答案: 在Java中,二维数组实际上是长度可能不同的数组的数组(不能保证在二维数组中第二维数组的长度都相同) 您可以将任何第二维数组的长度作为where 。 如果将二维数组视为矩阵,则可以简单地获取和,但是请注意,您可能会假设第二维的
我有两个数组 它们的长度都是4。City保存每个城市的名称,temp保存每个城市的平均温度。温度中的温度与城市中的城市顺序相同。所以我的问题是,我怎样才能得到temp中最大int的索引?我想打印出来
我想从你那里得到电话号码 使用JavaScript/jQuery。 这个系列可能会更多。
问题内容: 我有一个类似于下面的多维数组。我试图实现的是一种从数组中查找和获取“ Total”值最高的数组的方法,现在我知道有一个称为的函数,但不适用于像这样的多维数组。 我想做的是创建一个foreach循环并仅使用总数构建一个新数组,然后使用它来找到最大值,这将起作用,唯一的问题是检索与此相关的其余数据最大值。我不确定这也是最有效的方法。 有任何想法吗? 问题答案: 从PHP 5.5开始,您可以
问题内容: 我有一个像这样的数组: 如何删除重复的值,以便得到此信息: 我尝试使用array_unique,但是我认为由于该数组是多维的,因此无法正常工作。 编辑:我还需要此数组是多维的,并且以这种格式,我不能展平它。 问题答案: 在比较值以查找唯一值之前正在使用字符串转换: 注意 :当且仅当时,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个元素。 但是数组将始终转换为: 您可以