PHP数组循环重置问题:循环输出66次,周五后重置为周一
解决PHP数组循环输出66次并重置的问题
嘿,我来帮你搞定这个数组循环的问题!先看看你原代码里的几个关键问题,再给你两种靠谱的解决方案:
原代码的问题分析
- 错误修改了数组变量:你一开始写了
$days = current($days);,这直接把原本的数组变成了字符串(数组的第一个元素'Monday'),后面的next($days)、end($days)这些操作都是针对字符串的,完全起不到遍历数组的作用。 - 循环条件逻辑错误:
while($days <= 66)是把字符串和数字66比较,逻辑完全不通,我们需要一个计数器来控制总共输出66次。 - 判断数组末尾的方式不对:
if (end ($days))里的end()是把指针移到数组最后并返回元素值(这里是'friday'),非空字符串会被当作true,但这不是判断当前指针是否到末尾的正确方式,而且每次调用end()都会移动指针,打乱遍历顺序。
解决方案1:用数组索引控制(更稳定直观)
这种方式通过索引来遍历数组,逻辑清晰不容易出错:
$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'friday'); $totalOutputs = 66; $currentIndex = 0; $dayCount = count($days); for ($i = 1; $i <= $totalOutputs; $i++) { // 输出当前元素,可以根据需求调整格式(比如加换行或分隔符) echo $days[$currentIndex] . ' '; $currentIndex++; // 当索引超出数组长度时,重置为0回到开头 if ($currentIndex >= $dayCount) { $currentIndex = 0; } }
解决方案2:用数组指针控制(贴合你的初始思路)
如果你想用数组指针来实现,调整一下判断逻辑就可以:
$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'friday'); reset($days); // 先把指针重置到数组第一个元素 $totalOutputs = 66; for ($i = 1; $i <= $totalOutputs; $i++) { echo current($days) . ' '; // next()移动指针,当指针到末尾后再调用next()会返回false,此时重置指针 if (!next($days)) { reset($days); } }
两种方案都能实现你要的效果:循环输出数组元素,每到'friday'之后就回到'Monday',直到总共输出66次。
内容的提问来源于stack exchange,提问作者Siyad Nijah
相关产品推荐
相关产品推荐

