在我的php应用程序中,我有以下代码:
try {
$ordersIngredients[$userIngredient->getId()][$day] += $quantity;
} catch (\Exception $e) {
~r(array(
$ordersIngredients[$userIngredient->getId()],
$day,
array_key_exists($day, $ordersIngredients[$userIngredient->getId()]),
$e->getMessage()
));
}
r()
功能打印以下内容:
array(4)
0 => array(4)
0 => 0.9
1 => null
2 => null
3 => 1
)
1 => 3
2 => true
3 => Notice: Undefined offset: 3
)
如果给定转储数组和array_key_exists,当偏移量实际存在时,如何在未定义的偏移量上出现错误?
答案 0 :(得分:1)
这里的问题是你试图将追加添加到数组中不存在的值。
$ordersIngredients[$userIngredient->getId()][$day] += $quantity;
这与写作相同:
$ordersIngredients[$userIngredient->getId()][$day] =
$ordersIngredients[$userIngredient->getId()][$day] + $quantity;
所以,正在发生的事情是PHP试图读取索引3
的值,但它不能。这就是导致通知的原因。由于它只是一个通知,PHP将未定义的索引视为null
并继续。然后它会将null + $quantity
添加到您的数组中。
完成该行后,它将进入错误处理程序,然后进入catch
块。