提问人:Aleyn 提问时间:11/11/2022 最后编辑:mickmackusaAleyn 更新时间:11/11/2022 访问量:80
按日期键筛选数组,以便仅保留一年-月份的最新日期
Filter array by its date keys so that only the latest day of a year-month is retained
问:
我有一个带有格式键的数组。我想过滤数组,以便保留的唯一行将与一年-一个月的最新一天相关联。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
}
}
答:
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
演示真的很有启发性,我能够根据自己进行调整,非常感谢,您非常感兴趣
下一个:比较用户输入
评论