gpt4 book ai didi

php - 如何使用 PHP 在数组中对连续的月份进行分组?

转载 作者:行者123 更新时间:2023-12-02 06:26:49 25 4
gpt4 key购买 nike

我有这个数组的原始数据

['jan', 'feb', 'mar', 'may', 'june', 'dec']

我想把它转换成这样的数组组
[
0 => ['jan', 'feb', 'mar'],
1 => ['may', 'june'],
2 => ['dec'],
]

所以我想要的是从来自复选框的月份的动态返回中对连续月份进行分组

到目前为止,这是我尝试做的事情,现在被这个问题困扰了一段时间
if (count($trip_months) == 12):
$trip_months = 'ALL YEAR';
elseif (count($trip_months) > 0):
$temp_text = '';
$first_month = '';
$last_month = '';
$previous_month = '';
$next_month = '';
$separator = '';
$months = ['jan' => '', 'feb' => '', 'mar' => '', 'apr' => '', 'may' => '', 'june' => '', 'july' => '', 'aug' => '', 'sept' => '', 'oct' => '', 'nov' => '', 'dec' => ''];

foreach ($trip_months as $trip_month):
if ($trip_month != 'jan') $previous_month = $months[$trip_month];
if ($trip_month != 'dec') $next_month = $months[$trip_month];

if ($first_month == '') {
$first_month = $trip_month;
$last_month = $trip_month;
} else {

}
endforeach;
$trip_months = $temp_text;
endif;

我想我并没有接近我试图实现的目标

最佳答案

这是做你想做的事的一种方法。它使用 DateTime对象将月份名称转换为数字,然后检查当前月份是否与上一月份连续,如果是,则将其添加到当前行程中,否则开始新行程:

$arr = ['jan', 'feb', 'mar', 'may', 'june', 'dec'];

$trip_months = array();
$last_month = -1;
$i = -1;
foreach ($arr as $month) {
$this_month = DateTime::createFromFormat('M', $month)->format('n');
if ($this_month != ($last_month + 1) % 12) {
// new trip
$trip_months[++$i] = array($month);
}
else {
// continuing old trip
$trip_months[$i][] = $month;
}
$last_month = $this_month;
}
print_r($trip_months);

输出:
Array
(
[0] => Array
(
[0] => jan
[1] => feb
[2] => mar
)
[1] => Array
(
[0] => may
[1] => june
)
[2] => Array
(
[0] => dec
)
)

Demo on 3v4l.org

关于php - 如何使用 PHP 在数组中对连续的月份进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58093642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com