PHP数组foreach遍历失效问题求助(附控制器代码)
排查你的foreach遍历失败问题
先看你给出的代码片段,最直接导致遍历失败的原因是语法错误,这会让PHP直接解析失败,根本没法执行到遍历逻辑:
- 变量名拼写错误+代码未完成:在
array_push($result, $data_mont...这一行,你前面定义的是$data_month,但这里写成了$data_mont(少了最后一个字母h),而且末尾的...是未完成的代码标记,这两个问题合起来直接触发语法错误。
先把这个语法问题修正,以下是完整的可运行代码:
$start = (new DateTime("2016-11-01"))->modify('first day of this month'); $end = (new DateTime("2017-02-01"))->modify('first day of next month'); $interval = DateInterval::createFromDateString('1 month'); $period = new DatePeriod($start, $interval, $end); $result = array(); foreach ($period as $dt) { $data_month = array( 'month' => $dt->format("n"), 'year' => $dt->format("Y") ); array_push($result, $data_month); // 修正变量名,补全代码 } // 可打印结果验证 print_r($result);
如果修正语法后还是有遍历异常的情况,你可以再排查这几个点:
- 确认DatePeriod的区间是否符合预期:你的
$end是2017-02-01的下一个月第一天(也就是2017-03-01),所以遍历会包含2016-11、2016-12、2017-01这三个月份,看看是不是你想要的范围。 - 检查PHP版本:DatePeriod在PHP5.3及以上才支持,要是你的版本太老可能会出问题。
- 时区问题:如果服务器时区和你预期的不一样,日期计算可能会有偏差,可以用
date_default_timezone_set('Asia/Shanghai')(换成你需要的时区)来统一。
先把语法错误改了,应该就能正常遍历啦。
内容的提问来源于stack exchange,提问作者RAVI BANGKIT NUR ZIKRILLAH
相关产品推荐
相关产品推荐

