假设我有这段代码:
<?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,依此类推。
下面的代码......它有效。经验和级别循环有效,但数组没有。
我做错了什么?
答案 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从您的函数返回到您的主脚本,它将起作用。