在函数作用域内声明的变量可以在全局作用域中访问吗?

问题描述 投票:0回答:1

我目前正在尝试为一款游戏创建一个团队生成器,根据玩家评分来组织团队。在嵌套数组中添加玩家时,我遇到了一个小问题。我最终将向数组添加数据库调用。我不明白为什么在我尝试将玩家添加到团队数组中后无法回应这些玩家。随机数用于测试目的。

$players = array();
$captains = array();
for ($i = 1; $i <= 40; $i++){
  $players[] = array('name' => 'Player ' . $i, 'MMR' => rand(2800,4200));
}
for ($i = 1; $i <= 10; $i++){
  $captains[] = array('name' => 'Captain ' . $i, 'MMR' => rand(3200,4200));
}

//sort the players by MMR
usort($players, function($a, $b) {
  return $a['MMR'] - $b['MMR'];
});

 //sort the captains by MMR
usort($captains, function($a, $b) {
   return $a['MMR'] - $b['MMR'];
});

//put captains on teams
$teams = array();
for($i = 0;$i < count($captains); $i++){
  $teams[] = array('name' => 'Team ' . ($i + 1), 'captain' => $captains[$i], 'players' => array(), 'totalMMR' => $captains[$i]['MMR']);
}

我认为问题可能出在这里:

function addPlayer($team,$newPlayer){
  $teams[$team]['players'][] = $players[$newPlayer];
  $teams[$team]['totalMMR'] += $players[$newPlayer]['MMR'];
 }

addPlayer(0,0);

$output = '';
foreach($teams as $team){
  $output .= '<div class="teams">' . $team['name'] . '<br />' . $team['captain']['name'] . ': ' . $team['captain']['MMR'] . '<br />';
for ($i = 0; $i < count($team['players']); $i++){
$output .= $team['players'][$i]['name'] . ': ' . $team['players'][$i]['MMR'] . '<br />';
}
$output .= '</div>';
}
echo $output;

现在队长们都在回声,但我添加的球员却没有。任何帮助将不胜感激。

php function scope global-variables
1个回答
2
投票
function addPlayer($team,$newPlayer){
    $teams[$team]['players'][] = $players[$newPlayer];
    $teams[$team]['totalMMR'] += $players[$newPlayer]['MMR'];
}

此函数中没有名为

$teams
的变量。 如果您想修改名为
$teams
的全局变量,那么您可以将
global $teams;
作为函数中的第一行。

同样适用于

$players
(尽管您应该已经收到有关未定义索引的通知)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.