2012-09-27 45 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返回到您的主腳本,它將工作。