2012-09-27 50 views
0

比方说,我有这样的代码:PHP试图在for循环中存储号码到数组

<?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 
?> 

我试图让一个数组来存储的进出口。因此,1级将是$aLevel[0],EXP将为0(明显),2级将为$aLevel[1],EXP将为83等等。

下面的代码...它的工作原理。经验和水平循环的作品,但阵列没有。

我在做什么错?

+0

你能解释一下阵列中的号码和返回的数字之间的关系'experience'?看起来你通过循环遍历每n个1-n多次执行大量计算,但也许是因为我没有看到你要做什么。 – grossvogel

回答

1

除了您的范围问题(功能内部使用的$aLevel与外部不一样)之外,您正在计算体验WAY的次数太多。当$ 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"; 
} 
+0

http://stackoverflow.com/questions/12614786/php-get-experience-by-level – nn2

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 
?> 
+0

最后两个回声返回'98'和'332' ...这是..奇怪的是不正确的。 :S – nn2

+0

我得到了:332
699.在测试中,我删除了'$ x-1' –

+0

John的结果(332和699)是正确数字(83和174)的4倍吗?也许是因为在将它们添加到数组之前,您并未将这些“$ a”值除以4。 – grossvogel

0

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

Array ([0] => 98) 98 

...这是正确的为$ ALEVEL阵列内部功能是不一样的变量。

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