我正在尝试简单地向这样的数组添加+1
$game['teamA']['goals']++;
但是它会给我一个关于未定义索引的错误。我想这是因为在我为它添加值之前没有设置$game['teamA']['goals']
。
但是,有没有办法解决这个问题?
我可以在模拟开始时设置$game['teamA']['goals'] = 0
,但是我必须使用freekicks,惩罚,牌等来做到这一点,然后为两个团队做。是不是有另一种方法呢?
提前致谢:)
答案 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;