0

假设我有这个代码:

<?php

$aLevel[] = 98;

function experience($L) {
 $a=0;
  for($x=1; $x<$L; $x++) {
    $a += floor($x+300*pow(2, ($x/7)));
    $aLevel[$x-1] = $a; // we minus one to comply with array
  }
 return floor($a/4);
}

for($L=1;$L<100;$L++) {
 echo 'Level '.$L.': '. number_format(experience($L)). '<br />';
}

echo $aLevel[0]; // Level 1 should output 0 exp
echo "<br />" . $aLevel[1]; // Level 2 should output 83 exp
// et cetera
?>

我正在尝试创建一个数组来存储 exp。所以 1 级是$aLevel[0],EXP 是 0(很明显),2 级是$aLevel[1],EXP 是 83 等等。

下面的代码......它的工作原理。经验和关卡循环有效,但阵列无效。

我究竟做错了什么?

4

3 回答 3

1

除了您的范围问题($aLevel函数内部使用的与外部不同)之外,您计算经验的次数太多了。当 $L = 98 时,您计算 1-97 级的经验,然后当 $L = 99 时,您重新计算。此外,您将返回值除以 4,而不是存储在数组中的值。

假设我了解您要使用的算法,我可能会这样做:

function getExperienceByLevel ($maxLevel)
{
  $levels = array ();
  $current = 0;
  for ($i = 1; $i <= $maxLevel; $i++){
    $levels[$i - 1] = floor ($current / 4);
    $current +=  floor($i+300*pow(2, ($i/7)));
  }
  return $levels;
}


$aLevels = getExperienceByLevel (100);
for ($i = 0; $i < 100; $i++)
{
  echo 'Level ' . ($i + 1) . ': '. number_format($aLevels[$i]) . "<br />\n";
}
于 2012-09-27T00:46:24.953 回答
0

该数组是在函数中设置的,因此在全局范围内不可用。

这有效(最好不要使用global,但在这种情况下它是一个快速而肮脏的解决方案): DEMO

<?php 

$aLevel[] = 98;

function experience($L) {
global $aLevel;
 $a=0;
  for($x=1; $x<$L; $x++) {
    $a += floor($x+300*pow(2, ($x/7)));
    $aLevel[$x-1] = $a; // we minus one to comply with array
  }
 return floor($a/4);
}

for($L=1;$L<100;$L++) {
 echo 'Level '.$L.': '. number_format(experience($L)). '<br />';
}

echo $aLevel[0]; // Level 1 should output 0 exp
echo "<br />" . $aLevel[1]; // Level 2 should output 83 exp
// et cetera
?>
于 2012-09-27T00:14:56.950 回答
0

$aLevel[] 数组在函数外部不可访问(参见变量范围)。在脚本的末尾,$aLevel 仅包含以下内容:

Array ( [0] => 98 ) 98

...这是正确的,因为函数内的 $aLevel 数组不是同一个变量。

尝试将 $aLevel 从您的函数返回到您的主脚本,它会起作用。

于 2012-09-27T00:18:58.693 回答