有效值的未定义索引,但if子句中的值已更改?

时间:2012-12-25 11:02:09

标签: php arrays indexing undefined laravel

嗨,我正在制定一个时间表课程,但我遇到了最棘手的问题。 通常我很快就把它弄清楚了,但这次它只是让ZERO感觉到了

if子句如下:

if($start < self::$aStoreHours[$day]['start']){

正如你在这里看到没有错,它给了我一个未定义的索引错误,这会告诉我数组键不存在所以我使用var_dump返回完整的数组,我得到:(我只删除了第一个相关的部分)

array(6) { [2]=> array(2) { ["start"]=> string(3) "480" ["end"]=> string(4) "1300" }

所以键2确实存在,现在我转储返回

的$ day变量
string(1) "2"

好吧这给了2,这很奇怪,所以我想也许它必须是一个INT(从来没有遇到过这个问题,但在严格的语言中这很重要)所以我使用了intval和(int)方法 现在PHP向我发出Undefined Offset错误,所以这不是问题

现在对于最奇怪的部分,完整的错误是

Undefined index: 1

所以它试图告诉我,它试图调用self :: $ aStoreHours [1],但$ day变量肯定是2(是的,行号是正确的,如果我在它返回2之前转储$ day变量)

突然之间,$ day变量被忽略了但是这会给出一个null,所以不是这样,据我所知,$ day变量被改为1,这是数组中不存在的键,但它不会改变< / p>

更奇怪的是,代码昨天没有问题(它正在使用时间戳,所以不太奇怪)

我希望这个问题得到了很好的解释,有人可以帮助我,因为这对我来说毫无意义

注意: 使用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'];
    }

1 个答案:

答案 0 :(得分:1)

感谢有用的评论,我发现问题没有在第一次通话时发生,但是在第7次通话中我通过添加这部分代码找到了这个

if(!array_key_exists($day, self::$aStoreHours)){
 die(var_dump($day));
}

在我第一次打电话之前杀了它,但那时美元仍然是正确的 事实证明,选择的时间戳是从下周开始的星期一,而不是SQL查询,因为只要今天的时间戳和结束时的一周的最后一天,脚本就可以从过去和未来获得时间戳。时间涉及

但我删除了比当前时间段更长或更短的时间戳,遗憾的是我用来减少时间戳的结束时间戳为下周一给出了一个时间戳。它本周一试图解析,但这是不允许的,因为它是星期二,星期一是无关紧要的。

长话短说,我不得不开箱即用。

感谢所有人的帮助!