PHP - 解决方法数组的未定义索引

时间:2012-10-13 12:55:55

标签: php

我正在尝试简单地向这样的数组添加+1

$game['teamA']['goals']++;

但是它会给我一个关于未定义索引的错误。我想这是因为在我为它添加值之前没有设置$game['teamA']['goals']

但是,有没有办法解决这个问题?

我可以在模拟开始时设置$game['teamA']['goals'] = 0,但是我必须使用freekicks,惩罚,牌等来做到这一点,然后为两个团队做。是不是有另一种方法呢?

提前致谢:)

4 个答案:

答案 0 :(得分:2)

我建议你按照你的建议进行“适当的初始化”。这将是您的程序的一些代码,但它总是更好,然后检查每个更新。做得更好

$game = array( 'teamA' => array('goals'       => 0,
                                'freekicks'   => 0,
                                'penalties'   => 0,
                                // etc ...                       
                          ),
               'teamB' => array('goals'       => 0,
                                'freekicks'   => 0,
                                'penalties'   => 0,
                                // etc ...
                          )
        );  

而不是

if(isset($game['teamA']['goals']))
    $game['teamA']['goals']++;
else
    $game[teamA]['goals'] = 1;

正确初始化变量没有错 - 所有这些。这样做甚至是可取的。

答案 1 :(得分:2)

在使用变量之前,您应始终初始化变量。一种方法是:

$game = array('teamA' => 
                  array(
                      'goals' => 0,
                      'freekicks' => 0,
                      'penalties' => 0,
                      ....
                  ),
              'teamB' =>
                  array(
                      'goals' => 0,
                      'freekicks' => 0,
                      'penalties' => 0,
                      ...
                  )
              );

答案 2 :(得分:1)

编写一个包装函数来设置值。

<?php

function increment(&$dict, $key1, $key2) {
  if (!isset($dict, $key1))
    $dict[$key1] = array();
  if (!isset($dict[$key1], $key2))
    $dict[$key1][$key2] = 1;
  else
    $dict[$key1][$key2] ++;
}

$game= array();
increment($game, "teamA", "goals");
var_dump( $game);
?>

这实际上取决于您对运行时的期望;如果经常调用这些操作,最好在执行任何其他操作之前创建所有数组索引,例如https://stackoverflow.com/a/12873359/1689451建议。

答案 3 :(得分:0)

你可以做一件事。在递增之前,检查是否存在数组,如果没有,请创建一个!就如此容易。您可以使用名为isset()的内置函数来检查变量是否存在。

短道:

(isset($game['teamA']['goals']) ? $game['teamA']['goals']++ : $game['teamA']['goals'] = 1;

或使用if条件:

if (isset($game['teamA']['goals'])
    $game['teamA']['goals']++;
else
    $game['teamA']['goals'] = 1;