2
$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;

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

4

5 回答 5

2

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

于 2012-06-27T14:40:08.313 回答
2

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

$total = array('health' => 0, 'strength' => 0, 'agility' => 0, 'stamina' => 0, 'defence' => 0);
于 2012-06-27T14:42:40.817 回答
0

通过 for each 的第一个循环不存在关键的“健康”。因此,您将收到通知。

你可以做:

$total[$value] = 0;

就在第二个 foreach 的正上方。

或者,您可以以懒惰的方式进行操作并取消通知:

error_reporting(E_ALL ^ ~E_NOTICE);
于 2012-06-27T14:45:06.463 回答
0

我希望是因为您正在尝试增加未初始化的值...

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

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

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

$total = array();
$total['health'] = 0;
etc...

或者像@josmith 在他的回答中建议的那样做

于 2012-06-27T14:40:16.817 回答
0

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

于 2012-06-27T15:26:46.593 回答