php - 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");
}
}
}
解决方案
我建议查看 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];
}
}
}
推荐阅读
- android - 搜索具有多列的 sqlite
- c# - C++ 依赖管理
- javascript - 仅选择由其类标识的元素的子元素
- javascript - primeNg Schedule (calendar) 加载 Angular 日历的问题
- java - iText PDF - 将两个 pdf 与 PdfCopy 合并后,PDFActions (PdfAction.gotoLocalPage) 丢失/不起作用
- android - React Native App 没有错误地呈现任何内容
- c# - 如何告诉 VSCode 调试器重新加载文件
- asp.net-mvc - 如何将数据从视图中的 datepicker 传递到 mvc 中的控制器
- java - 尝试生成签名的 APK 时出现 TaskExecutionException
- sql - 在 SQL 中实现 LIMIT 的其他替代方法