首页 > 解决方案 > PHP - 任何简单的方法来制作这个数学方程?

问题描述

我有一个游戏,你可以在其中购买防御,但我的数学没有加起来,我不明白我应该如何解决它。

Amount from   amount to       Price pr
0             10 000          $1 500 
10 000        50 000          $2 500
50 000        1 000 000       $3 000
1 000 000     5 000 000       $5 000
5 000 000     inf             $10 000

$fp_from[0] = 0;
$fp_to[0] = 10000;

$fp_from[1] = $fp_to[0];
$fp_to[1] = 50000;

$fp_from[2] = $fp_to[1];
$fp_to[2] = 1000000;

$fp_from[3] = $fp_to[2];
$fp_to[3] = 5000000;

$fp_from[4] = $fp_to[3];
$fp_to[4] = INF;

$price_pr[0] = 1500;
$price_pr[1] = 2500;
$price_pr[2] = 3000;
$price_pr[3] = 5000;
$price_pr[4] = 10000;

现在我只有这个 for 循环来获取价格:

for($k = 0; $k < count($fp_from); $k++){
    if($defence >= $fp_from[$k] && $defence <= $fp_to[$k]){
        $my_price_pr = $price_pr[$k];
    }
}

但是假设我有 1 000 防御,购买 10 000 我将有 11 000。但是 10 000 的价格仅为 1 500 pr,但我希望高达 10 000 的金额为 1 500,超过 2 500 . 我得到的价格是 15 000 000 ( 10 000 * 1 500 ),但我想要的价格是 16 000 000 ( 13 500 000 + 2 500 000 )。

这是我的整个购买脚本

if(isset($_POST['post'])){
    if(isset($_POST['amount'])){
        $amount = remove_space($_POST['amount']);
        
        $defence = $AS_session_row['AS_def'];
        $my_price_pr = 0;
        $money = 100000000; // 100 000 000

        for($k = 0; $k < count($fp_from); $k++){
            if($defence >= $fp_from[$k] && $defence <= $fp_to[$k]){
                $my_price_pr = $price_pr[$k];
            }
        }
        
        if(is_numeric($amount) && $amount > 0){
            if($my_price_pr * $amount <= $money){
                $total_price = $my_price_pr * $amount;
                
                give_fp($amount, $_SESSION['ID'], $pdo);
                take_money($_SESSION['ID'], $total_price, $pdo);
                
                echo success_msg("FP was bought");
            } else {
                echo error_msg("Not enough money");
            }
        } else {
            echo fail_msg("Wrong input");
        }
    }
}

标签: phpfor-loopmath

解决方案


我建议查看 foreach 循环https://www.php.net/manual/en/control-structures.foreach.php它们在处理数组时非常有用。

编辑:您需要在循环价格时增加 total_price 并考虑购买前后的防御水平。之后,如果该人有足够的钱等,您可以使用您的支票...

$defence = 0;
$my_price_pr = 0;

$fp_from[0] = 0;
$fp_to[0] = 10000;

$fp_from[1] = $fp_to[0];
$fp_to[1] = 50000;

$fp_from[2] = $fp_to[1];
$fp_to[2] = 1000000;

$fp_from[3] = $fp_to[2];
$fp_to[3] = 5000000;

$fp_from[4] = $fp_to[3];
$fp_to[4] = INF;

$price_pr[0] = 1500;
$price_pr[1] = 2500;
$price_pr[2] = 3000;
$price_pr[3] = 5000;
$price_pr[4] = 10000;


$total_price = 0;

$amount = 11000;

$my_price_pr = 0;



$defenceAfterBuying = $defence + $amount;

foreach ($price_pr as $key => $value) {
    for ($i=$defence; $i <= $defenceAfterBuying; $i++) { 
        if ($i > $fp_from[$key] && $i <= $fp_to[$key]) {
            $total_price += $price_pr[$key];
        }
    }
}

推荐阅读