如何获得30天多维数组的最大值

时间:2019-04-01 10:59:20

标签: php arrays datetime multidimensional-array chart.js

我正在使用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

4 个答案:

答案 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, '.', '').",";
      }
  }
?> ],