Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有效值上的未定义索引,但此值在if子句中已更改?_Php_Arrays_Indexing_Undefined_Laravel - Fatal编程技术网

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的时间戳