php 循环遍历数组并输出日期和计数器

问题描述 投票:0回答:1

所以我有这个代码:

$avaDates = [['date_starts'=>'2024-03-01'],['date_starts'=>'2024-03-09'],['date_starts'=>'2024-04-05'],['date_starts'=>'2024-04-09'],['date_starts'=>'2024-04-15'],['date_starts'=>'2024-05-03']];
$sum = 0;
$months = '';
foreach($avaDates as $date){
    $monthCheck = substr($date['date_starts'], 0, -3);
    if($months !== $monthCheck){
        $months = $monthCheck;
        $dateFormat = date("F-Y", strtotime($months));

        echo strtolower($dateFormat).' '.$sum."\n";

        $sum = 0;
    }
    $sum ++;
}

实际输出是这样的:

march-2024 0
april-2024 2
may-2024 3

我正在寻找的是这个输出:

march-2024 2
april-2024 3
may-2024 1

似乎无法使逻辑工作,任何帮助将不胜感激,这里是运行我的示例的沙箱的链接:https://onlinephp.io/c/47724

php loops
1个回答
0
投票

我认为如果您修剪日期值,您可以使用

array_count_values
来获取计数。比如:

$avaDates = [['date_starts'=>'2024-03-01'],['date_starts'=>'2024-03-09'],['date_starts'=>'2024-04-05'],['date_starts'=>'2024-04-09'],['date_starts'=>'2024-04-15'],['date_starts'=>'2024-05-03']];
foreach($avaDates as $key => $date){
    $avaDates[$key]['date_starts'] = substr($date['date_starts'], 0, 7);
}
foreach(array_count_values(array_column($avaDates, 'date_starts')) as $date => $count){
    echo date('F-Y', strtotime($date . '-01')) . ' ' . $count . PHP_EOL;
}

应该这样做。甚至可以使用

array_map
来缩短它。

© www.soinside.com 2019 - 2024. All rights reserved.