Php 有效值上的未定义索引,但此值在if子句中已更改?
嗨,我正在上一堂课表课,但我遇到了一个最奇怪的问题。 通常我自己很快就明白了,但这次完全没有意义 如果条款如下:Php 有效值上的未定义索引,但此值在if子句中已更改?,php,arrays,indexing,undefined,laravel,Php,Arrays,Indexing,Undefined,Laravel,嗨,我正在上一堂课表课,但我遇到了一个最奇怪的问题。 通常我自己很快就明白了,但这次完全没有意义 如果条款如下: if($start < self::$aStoreHours[$day]['start']){ 所以键2确实存在,现在我转储$day变量,它返回 string(1) "2" 好的,这是2,这很奇怪,所以我想可能是INT(以前从来没有这个问题,但在严格的语言中这很重要),所以我使用intval和(INT)方法 现在PHP向我输出未定义的偏移量错误,所以这不是问题所在 最奇怪的
if($start < self::$aStoreHours[$day]['start']){
所以键2确实存在,现在我转储$day变量,它返回
string(1) "2"
好的,这是2,这很奇怪,所以我想可能是INT(以前从来没有这个问题,但在严格的语言中这很重要),所以我使用intval和(INT)方法
现在PHP向我输出未定义的偏移量错误,所以这不是问题所在
最奇怪的是,完全的错误是
Undefined index: 1
所以它试图告诉我,它试图调用self:$aStoreHours[1],但是$day变量肯定是2(是的,行号是正确的,如果我在$day变量返回2之前转储它)
突然间,$day变量被忽略了,但这会给出一个null,所以不是它,据我所知,$day变量被更改为1,这是数组中不存在的键,但它没有更改
更奇怪的是,代码昨天运行时没有问题(它使用的是时间戳,所以不太奇怪)
我希望这个问题已经解释得足够好,有人可以帮助我,因为这对我来说毫无意义
注:
使用Laravel框架
更新:
是的,它在函数范围内运行,变量不能从外部更改
大部分代码
private static function addTime($day,$start,$end,$title){
echo $day.':'.$start.':'.$end.':'.$title.'<br>';
//Check if start isnt lower then opening time, and that end isnt past closing time
if($start < self::$aStoreHours[$day]['start']){
$start = self::$aStoreHours[$day]['start'];
}
if($end > self::$aStoreHours[$day]['end']){
$end = self::$aStoreHours[$day]['end'];
}
if(!array_key_exists($day, self::$aStoreHours)){
die(var_dump($day));
}
私有静态函数addTime($day、$start、$end、$title){
回显$day.:'.$start.:'.$end.:'.$title.“
”;
//检查开始时间是否低于开门时间,结束时间是否超过关门时间
如果($startself::$aStoreHours[$day]['end'])){
$end=self::$aStoreHours[$day]['end'];
}
多亏了有用的注释,我发现问题在第一次通话时没有出现,但在第七次通话时,我通过添加这部分代码发现了这一点
private static function addTime($day,$start,$end,$title){
echo $day.':'.$start.':'.$end.':'.$title.'<br>';
//Check if start isnt lower then opening time, and that end isnt past closing time
if($start < self::$aStoreHours[$day]['start']){
$start = self::$aStoreHours[$day]['start'];
}
if($end > self::$aStoreHours[$day]['end']){
$end = self::$aStoreHours[$day]['end'];
}
if(!array_key_exists($day, self::$aStoreHours)){
die(var_dump($day));
}
在我第一次打电话的时候就把它搞定了,但是当时$day还是正确的
事实证明,所选择的时间戳是从下周开始的星期一,而不是SQL查询,因为脚本可以从过去和未来获取时间戳,只要涉及今天的时间戳和一周最后一天的结束时间
但是我剪掉了比当前时间段长或短的时间戳,不幸的是,我用来剪掉时间戳的结束时间戳比当前时间段长了一天,给出了下周周一的时间戳。它试图将其解析为本周周一,但这是不允许的,因为它是周二,周一是不相关的
长话短说,我得多想一想
谢谢大家的帮助!所以你是说如果($start
$day
更改为无效值。这不是相关的代码。是的,我会这么说,但没有任何东西会改变$day值,是的,那行给出了错误:看我是否这样做了“死(var_dump($day));如果($end>self::$aStoreHours[$day]['end']){“如果我删除了”die(var_dump($day)),我得到2;我得到了未定义的索引1加上:$day变量在一个函数范围内,它没有全局更改,我将用函数start发布更大部分的代码如果您执行die(var_dump($day))
,它将在对该函数的第一次调用中终止。该通知可能仅出现在对该函数的第二次/第三次/…调用中。如果(!array_key_存在($day,self:$astorhours)){/*转储$day的值,中止脚本*/},请尝试
.Awesome comment DCoder,我在第一次调用addTime时就终止了它,但问题发生在第七次调用中,该调用试图为星期一(1)添加时间这是不可用的,因为它是星期二2。因此,我的代码从数据库中获取时间戳选择一个,以提前解决问题,因为它不允许解析来自过去THX!THX ALL的时间戳