PHP试图将for循环中的数字存储到数组中

时间:2012-09-27 00:11:07

标签: php arrays math numbers

假设我有这段代码:

<?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,依此类推。

下面的代码......它有效。经验和级别循环有效,但数组没有。

我做错了什么?

3 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分: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
?>

答案 2 :(得分:0)

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

Array ( [0] => 98 ) 98

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

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