按日期键筛选数组,以便仅保留一年-月份的最新日期

Filter array by its date keys so that only the latest day of a year-month is retained

提问人:Aleyn 提问时间:11/11/2022 最后编辑:mickmackusaAleyn 更新时间:11/11/2022 访问量:80

问:

我有一个带有格式键的数组。我想过滤数组,以便保留的唯一行将与一年-一个月的最新一天相关联。Y-m-d

示例阵列:

array:4 [▼
  "2022-10-30" => array:9 [▶]
  "2022-10-31" => array:6 [▶]
  "2022-11-07" => array:4 [▶]
  "2022-11-09" => array:3 [▶]
]

期望结果:

array:2 [▼
  "2022-10-31" => array:6 [▶]
  "2022-11-09" => array:3 [▶]
]

重要提示:此数组中可能还有其他月份,并且并非每个月的每一天都表示在输入数组中。

我开始编写一些代码,但我不确定如何继续。

public function monthly_average()
{
    
    global $datas,$dates;
    $args= $this->period_monthAverage($datas,$dates);
    dump($args);
    //dump($datas);
    dump($dates);
    dump($dates[0]>$dates[1]);
    $fdate=array();

    for ($i = 0; $i <= sizeof($dates); $i++){
        if(date('m',strtotime($date[i]))==date('m',strtotime($date[i+1]))){

        }
        
       //dump((date('m',strtotime($date)))); 10- 11

    }

}
PHP 数组 过滤 日期比较

评论

0赞 Nico Haase 11/11/2022
“我无法构建脚本”——为什么不呢?
0赞 Imran 11/11/2022
stackoverflow.com/questions/1686724/......看看这个答案
0赞 mickmackusa 11/11/2022
@Imran这是一项不同的任务。
0赞 Aleyn 11/11/2022
我不是在寻找这个月的最后一天,而是在寻找我自己的清单上的最后一天@Imran
1赞 Aleyn 11/11/2022
@mickmackusa我尽可能多地分享

答:

0赞 mickmackusa 11/11/2022 #1

维护年-月键控值的查找数组,其中值是日历上当月最晚发生的日期。

当月晚些时候出现时,替换结果中的元素并更新查找数组。

代码:(演示)

$result = [];
foreach ($array as $key => $value) {
    $ym = substr($key, 0, 7);
    if (!isset($lookup[$ym]) || $lookup[$ym] < $key) {
        $result[$key] = $value;
        if (isset($lookup[$ym])) {
            unset($result[$lookup[$ym]]);
        }
        $lookup[$ym] = $key;
    }
}
var_export($result);

或者用较少的函数调用编写:(演示)

$result = [];
foreach ($array as $key => $value) {
    $ym = substr($key, 0, 7);
    if (!isset($lookup[$ym])) {
        $result[$key] = $value;
        $lookup[$ym] = $key;
    } elseif ($lookup[$ym] < $key) {
        unset($result[$lookup[$ym]]);
        $result[$key] = $value;
        $lookup[$ym] = $key;
    }
}

评论

0赞 Aleyn 11/11/2022
演示真的很有启发性,我能够根据自己进行调整,非常感谢,您非常感兴趣