我正在使用与此类似的代码动态添加到数组;
$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/