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

初期化されていない値をインクリメントしようとしているためだと思います...

次のように、代わりに最初のラウンドで割り当ててみてください。

$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 に答える
0

for each の最初のループのキー 'health' が存在しません。その結果、通知が届きます。

できるよ:

$total[$value] = 0;

2 番目の foreach のすぐ上。

または、怠惰な方法で通知を抑制することもできます。

error_reporting(E_ALL ^ ~E_NOTICE);
于 2012-06-27T14:45:06.463 に答える