当前位置: 首页 > 知识库问答 >
问题:

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

司寇羽
2023-03-14

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

共有3个答案

叶茂才
2023-03-14

如果您使用mysql按日期分组并获得最大值,则可以触发查询,

SELECT MAX(value_raw), DATE(mydate) DateOnly FROM a_table where mydate BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW() GROUP BY DateOnly;
乐正瑞
2023-03-14
    $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();
范朗
2023-03-14

由于问题是关于基于键对多元数组进行排序,请尝试以下操作

// 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,但是我认为由于该数组是多维的,因此无法正常工作。 编辑:我还需要此数组是多维的,并且以这种格式,我不能展平它。 问题答案: 在比较值以查找唯一值之前正在使用字符串转换: 注意 :当且仅当时,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个元素。 但是数组将始终转换为: 您可以