有没有一种方法可以在数组的中间开始一个foreach循环?

5
我有一个月份的数组。我想通过每个月作为键来迭代获取每个月的值,但是...
我想从当前月份开始,运行foreach循环,然后回到下一年,在第12个月停止。
我尝试创建一个基于当前月份的单独月份数组,但这似乎有点不稳定。
3个回答

4
您可以使用一个带有模数计数器的do/while循环,例如:
$months = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
$i = $current_month = 5;
do {
    echo $months[$i] . "\n";
    $i = ($i + 1) % 12;
} while ($i != $current_month);

输出:

Jun 
Jul 
Aug 
Sep 
Oct 
Nov 
Dec 
Jan 
Feb 
Mar 
Apr 
May

如果您需要维护一个年份计数器,可以使用以下代码,当月份更改时增加年份:

在 3v4l.org 上的演示

$year = 2018;
$i = $current_month = 5;
do {
    echo $months[$i] . " $year\n";
    $i = ($i + 1) % 12;
    if ($i == 0) $year++;
} while ($i != $current_month);

输出:

Jun 2018
...
Dec 2018
Jan 2019
...
May 2019

Demo on 3v4l.org


整个第二年需要循环。例如:2019年6月至12月和2020年1月至12月。 - Jonathan
@Jonathan 我不这么认为,我认为第12个月是在第一个月之后的11个月,而不是下一年的12月。如果OP想表达的是12月,他本可以直接说出来。 - Nick
太棒了。如果我错了,你仍然有我的支持! :) - Jonathan
@Jonathan 我猜当OP接受一个答案时,我们就会知道他们真正的意思了... :-) - Nick
@Nick 很准确。我只需要获取当前月份-1,它就非常出色! - Dave S.

1
您可以尝试使用continue语句!
$current_month = 6; # just assuming, you can change as per your requirement.
foreach ($month_array as $k => $v) {
   if ($k < 5) continue;
   // your code here to go after your current month to end of the year's month
}

1
我认为Dave S希望数组循环回到开始的月份(但是是下一年)。例如:从Oct18开始,Nov18,Dec18,Jan19,Feb19等等... 这将在年底停止(Dec18)。 - Jonathan
1
@Jonathan 对不起,是我看错了!!我想从当前月份开始,运行foreach循环,并回到下一年,在第12个月停止。 - A l w a y s S u n n y

1
为什么不使用for语句呢?
$months = [
   'January', 
   'February',
   '...',
];

$currentMonth = 5; // 0 for January, 11 for December

for($i = 0; $i < 12; $i++) {
    $index = ($currentMonth + $i) % 12;

    echo $months[$index] . PHP_EOL;
}

将打印

June
July
August
September
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接