0

我试图简单地将 +1 添加到这样的数组中

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

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

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

我可以$game['teamA']['goals'] = 0在模拟开始时设置,但是我必须用任意球、点球、卡等来设置,并且为两支球队都这样做。没有其他方法可以做到这一点吗?

提前致谢 :)

4

4 回答 4

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;

正确初始化变量并没有错——所有变量。甚至建议这样做。

于 2012-10-13T13:01:05.167 回答
2

您应该始终在使用变量之前对其进行初始化。一种方法是:

$game = array('teamA' => 
                  array(
                      'goals' => 0,
                      'freekicks' => 0,
                      'penalties' => 0,
                      ....
                  ),
              'teamB' =>
                  array(
                      'goals' => 0,
                      'freekicks' => 0,
                      'penalties' => 0,
                      ...
                  )
              );
于 2012-10-13T13:01:25.633 回答
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建议的。

于 2012-10-13T13:08:01.133 回答
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;
于 2012-10-13T12:59:01.123 回答