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

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

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

undefined offset :1

问题:尝试创建数组值时,为什么会得到 undefined offset ?

我该怎么办?

进一步的信息(如果相关):
它发生在循环中,因此我正在通过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;
                }
            }
        }
    }
}

最佳答案

很简单,因为执行以下操作:$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可以产生 undefined offset 通知,因为它假定您传递给它的参数确实存在。为了避免产生此类通知,需要对isset进行检查,因此我已相应地更新了上面的代码。

关于php - 创建/添加多维数组值时的未定义偏移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27544823/

10-11 15:21