php奇怪的未定义偏移错误

时间:2015-09-03 18:18:27

标签: php arrays undefined

在我的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,当偏移量实际存在时,如何在未定义的偏移量上出现错误?

1 个答案:

答案 0 :(得分:1)

这里的问题是你试图将追加添加到数组中不存在的值。

$ordersIngredients[$userIngredient->getId()][$day] += $quantity;

这与写作相同:

$ordersIngredients[$userIngredient->getId()][$day] = 
    $ordersIngredients[$userIngredient->getId()][$day] + $quantity;

所以,正在发生的事情是PHP试图读取索引3的值,但它不能。这就是导致通知的原因。由于它只是一个通知,PHP将未定义的索引视为null并继续。然后它会将null + $quantity添加到您的数组中。

完成该行后,它将进入错误处理程序,然后进入catch块。