我正在使用与此类似的代码动态添加数组;
$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;
}
}
}
}
}
答案 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
检查,因此我已相应更新了上述代码。