未定义的偏移量0,但仍然给出了正确的结果

时间:2012-06-27 14:37:05

标签: php

$options = array('health', 'strength', 'agility', 'stamina', 'defence');

$total = array();

foreach ($options as $value)
{
    foreach ($objects as $object)
    {
        $total[$value] += $object->$value;
    }
}

var_dump($total);

我在名为$objects的数组中有一些对象。它正在向$total提供数据。

但由于某种原因,它正在抱怨一些未定义的偏移。

 Notice: Undefined index: health in C:\wamp\www\objbattle\index.php on line 32

第32行是:$total[$value] += $object->$value;

为什么!?我该如何摆脱它?

5 个答案:

答案 0 :(得分:2)

因为第一次迭代中不存在$total['health']

答案 1 :(得分:2)

这是因为您尝试增加未初始化的值。首先尝试将它们初始化。

$total = array('health' => 0, 'strength' => 0, 'agility' => 0, 'stamina' => 0, 'defence' => 0);

答案 2 :(得分:0)

我希望因为你试图增加一个未初始化的值......

尝试在第一轮进行分配,如下所示:

$total[$value] = $object->$value;

或更简单地说,初始化数组值...

$total = array();
$total['health'] = 0;
etc...
或者像@josmith在他的回答中建议的那样做

答案 3 :(得分:0)

每个第一个循环都不存在关键'健康'。因此,您将收到通知。

你可以这样做:

$total[$value] = 0;

在第二个foreach之上。

或者,你可以以懒惰的方式做到并抑制注意:

error_reporting(E_ALL ^ ~E_NOTICE);

答案 4 :(得分:0)

为什么!? 我认为因为设置报告了哪些PHP错误。