创建/添加多维数组值时未定义的偏移量

时间:2014-12-18 10:51:27

标签: php arrays multidimensional-array error-handling

我正在使用与此类似的代码动态添加数组;

 $arrayF[$f+1][$y][$x+1] = $value+1;

但是我在错误报告中收到了这个:

未定义的偏移量:1

问题:当我尝试创建数组值时,为什么会得到未定义的偏移?

我该怎么办?

更多信息,如果相关: 它发生在循环中,因为我通过masterArray“蔓延”了

if (is_array($arrayF[$f])){ 
    foreach ($arrayF[$f] as  $key2 => $arrayF2) {
        $y = $key2;
        foreach ($arrayF2 as $key3 =>$value) {
            $x = $key3;
            if (($y<=100)&& ($y>=1)&&($x<=100)&&($x>=1)){
                if ($value < $arrayMaster[$y][$x])  {
                    $arrayMaster[$y][$x] = $value;//resets value in a master array
                    $arrayF[$f+1][$y][$x+1] = $value+1;//creates a new array for F to 'sprawl' with
                    $max = $f+1;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

很简单,因为当您执行此操作时:$arrayF[$f+1][$y][$x+1] = $value+1;,您无法确定$arrayF[$f+1]是有效的偏移量/索引/键。你所知道的只是is_array($arrayF[$f])是真的。

修复很简单:

if (!isset($arrayF[$f+1]) || !is_array($arrayF[$f+1])) {
    $arrayF[$f+1] = array(
        $y => array()
    );
} else if (!is_array($arrayF[$f+1][$y])) {
        $arrayF[$f+1][$y] = array();
}
$arrayF[$f+1][$y][$x+1] = $value+1;

现在你为什么要收到通知?这是因为,如果$arrayF[$f+1]不存在,那么当您执行$arrayF[$f+1] = 'foobar';之类的简单分配时,PHP会很乐意为您创建。{但是,您正在访问(可能)不存在的偏移量(评估为null),并尝试将其用作数组:$arrayF[$f+1][$y],如果$arrayF[$f+1]没有&存在,那里不能有$y索引,因此通知:PHP警告你代码中可能存在错误

更新
正如下面的评论中所讨论的那样:is_array可以生成未定义的偏移通知,因为它假定您传递给它的参数实际存在。为避免产生此类通知,需要进行isset检查,因此我已相应更新了上述代码。