我试图简单地将 +1 添加到这样的数组中
$game['teamA']['goals']++;
但是它会给我一个关于未定义索引的错误。我猜那是因为$game['teamA']['goals']
在我为其添加值之前没有设置。
但是没有办法解决这个问题吗?
我可以$game['teamA']['goals'] = 0
在模拟开始时设置,但是我必须用任意球、点球、卡等来设置,并且为两支球队都这样做。没有其他方法可以做到这一点吗?
提前致谢 :)
我试图简单地将 +1 添加到这样的数组中
$game['teamA']['goals']++;
但是它会给我一个关于未定义索引的错误。我猜那是因为$game['teamA']['goals']
在我为其添加值之前没有设置。
但是没有办法解决这个问题吗?
我可以$game['teamA']['goals'] = 0
在模拟开始时设置,但是我必须用任意球、点球、卡等来设置,并且为两支球队都这样做。没有其他方法可以做到这一点吗?
提前致谢 :)
我建议您按照您的建议进行“适当的初始化”。这会给你的程序添加一些代码,但每次更新都要检查它总是更好。最好做
$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;
正确初始化变量并没有错——所有变量。甚至建议这样做。
您应该始终在使用变量之前对其进行初始化。一种方法是:
$game = array('teamA' =>
array(
'goals' => 0,
'freekicks' => 0,
'penalties' => 0,
....
),
'teamB' =>
array(
'goals' => 0,
'freekicks' => 0,
'penalties' => 0,
...
)
);
编写一个包装函数来设置值。
<?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建议的。
你可以做一件事。在递增之前,检查数组是否存在,如果不存在,则创建一个!就如此容易。您可以使用名为 的内置函数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;