2016-01-26 64 views
-2

我寫了一個簡單的代碼來計算數學公式,但我想遍歷從$start$end的數字。我正在做一個遊戲,這個頁面將計算達到下一個級別所需的經驗量並將其插入到數據庫中。從$start$end迭代的最佳方法是什麼,並計算該級別所需的exp數量?php,如何遍歷數字,並隨着我們的繼續添加,並計算新的數字

代碼:

<?php 

    $start = 1; 
    $end = 100; 

    $level = $start++; 
    $l = $level - 1; 
    $exp = ((40*($l * $l)) + (360 * $l)); 

?> 

因爲它位於現在它計算的第一級,但我不能爲我的生活弄清楚如何使它經歷直到它達到$end

+4

[for()loops](http://php.net/manual/en/control-structures.for.php) –

+1

或'while'循環,'foreach range',幾乎任何循環。 – Steve

+0

@MarkBaker想把這個答案作爲答案,並接受它。非常感謝你,我有一個大腦放屁,完全忘了()循環哈哈。 – rackemup420

回答

1
$exp = 0; 
for($level = $start; $level <= $end; $level++){ 
    $exp += 40 * $l ** 2 + 360 * $l; 
} 

其實,我們可以用數學來使這通過推廣所需的經驗水平而更快。因爲你的經驗函數是二次函數的總和:

f(n) 
= S[1 100] 40n^2 + 360n 
= 40n (n + 1) (2n + 1)/6 + 360n (n + 1)/2 

在PHP:

40 * $level * ($level + 1) * (2 * $level + 1)/6 + 360 * $level * ($level + 1)/2 

或進一步簡化它,如果你喜歡。

這肯定比計算循環100次更快。

如果$ start不是1,只需使用f(end) - f(start - 1)即可。

+0

謝謝,這種方法肯定更有效率!這個頁面只會被用來做一次計算,然後將它插入數據庫。 – rackemup420

0

您必須計算每個級別所需的xp,因此您應該將計算代碼放在從最低級別開始的循環中,並繼續執行,直到達到最高限制/結束級別。您可以在PHP中選擇兩種不同的循環類型,for循環和while循環。我個人會爲這個特定的「問題」選擇while循環,但這是每個人都必須自己決定的事情。爲您的計算器的代碼應該是這樣的:

// Create an extra variable to store the level for which you are currently calculating the needed xp 
$i = $start; 

// The while-loop (do this code until the current level hits the max level as specified) 
while($i <= end) { 
    // use $i to calculate your exp, its the current level 
    // Insert code here... 

    // then add 1 to $i and do the same again (repeat the code inside loop) 
    $i++; 
} 

這裏有一些鏈接到PHP的文檔:

while-loop
for-loop

+0

解釋如何解決OP的問題,這將更有利於每個人 – davejal

+0

@davejal沒有太多時間,現在增加了一些解釋線。希望這很容易理解 – seschi98

相關問題