PHP遍历节假日数组无输出、时间戳匹配返回值错误问题排查
问题原因分析
- 第一阶段
echo "test"无输出的原因是$holidays属于全局变量,你既没有在isNextDayHoliday函数内声明引入全局变量,也没有将其作为参数传入,函数内调用的$holidays属于未定义的空值,foreach遍历空值不会执行循环体,因此没有任何输出。这个你已经定位为作用域问题,修改为传参的解决方案是正确的。 - 第二阶段值完全相等仍返回false的根因是PHP变量对大小写敏感:
你在函数开头初始化的返回值变量名为$returnVal(V大写),但匹配成功的分支里赋值的是$returnval(v小写),二者在PHP中是完全独立的两个变量。匹配成功时你只是给未初始化的$returnval赋值为true,但是最终返回的$returnVal始终保持初始化的false值,才会出现日志里值相等却返回false的情况。
修复方案
仅需要统一赋值时的变量名大小写即可:
function isNextDayHoliday($date,$holidays) { $returnVal = false; foreach ($holidays as $holidayDay) { if($date == $holidayDay) { $returnVal = true; // 修改变量名和初始化的大小写一致 break; // 可选优化:匹配到后直接跳出循环,无需遍历剩余元素 } echo "Checking ".$date." vs. ".$holidayDay." = "; echo $returnVal ? "true" : "false"."<br/>"; } return $returnVal; }
可选简化方案
你也可以直接用PHP内置的in_array函数实现相同逻辑,无需手动遍历数组:
function isNextDayHoliday($date,$holidays) { return in_array($date, $holidays); }
内容的提问来源于stack exchange,提问作者Mateusz Żymła
相关产品推荐
相关产品推荐

