在网站上我有许多小的PHP脚本来自动更改网站文本,具体取决于从MySQL数据库计算的数字。该网站适用于筹款小组,主页上的相关文字提供了总金额。
筹集的金额从数据库中提取并四舍五入到最接近的千位数。这是我用来舍入数字并查找总数的最后三位数的PHP:
$ query4 = mysql_query(“SELECT SUM(amountraised)AS full_total FROM fundraisingtotal;”);
$ result4 = mysql_fetch_array($ query4);
$ fulltotal = $ result4 [“full_total”];
$ num = $ fulltotal + 30000;
$ ftotalr = round($ num,-3);
$ roundnum = round($ num);
$ string = $ roundnum;
$ length = strlen($ string);
$ characters = 3;
$ start = $ length - $ characters;
$ string = substr($ string,$ start,$ characters);
$ figure = $ string;
(30,000英镑是之前筹款团队从项目首次开始时筹集的金额,这就是我为$ num变量添加30000到$ fulltotal的原因)
目前案文如下:
the bookstall and other fundraising events have raised more than £<? echo number_format($ftotalr); ?>
我刚刚意识到,因为PHP正在四舍五入到最接近的千位,如果总数为例如39,200英镑而且四舍五入到40,000英镑,说它超过40,000英镑是不正确的,在那种情况下我'需要它说'差不多4万英镑'或类似的东西。我显然需要用变量替换'more than'。
显然我需要测试总数的最后三位数是否接近0或1000,所以如果总数是例如£39,2000,那么文本会读到'刚刚结束',如果它在£之间39,250和39,400英镑之类的东西比'过去',39,400英镑到39,700英镑之间的东西就像'结束',39,700英镑到39,999英镑之间'差不多'。
我设法将总数的最后三位数作为变量,我想我需要某种if / else / elseif代码块(不确定这是否是正确的方法,或者是否用例/休息),显然我将不得不检查数字是否符合每个标准,但我无法弄清楚如何做到这一点。有人可以建议最好的方法吗?
答案 0 :(得分:1)
而不是嵌套的if else
块,你可以有一个接受美元金额的函数,在函数内部将变量抛出switch case
语句,在特定情况下返回正确的{{1 }}'d text。
切换案例提供了几个echo
语句的可读性。如果您需要coIde示例,请与我们联系。
仅对整数进行比较,if else
是最好的选择。在比较导致布尔值的条件时,使用switch case
就是您所需要的。
我已经接受了您的代码并将if else
切换为case
,这是示例输出的样子:
if else
答案 1 :(得分:1)
最简单,最优雅的解决方案就像Lizard指出的那样,将价值放在首位,并且总是说“结束”。你甚至可以对前1000个问题做出例外处理,并将其下面的任何内容放到下一个100左右,例如...
<?
function getFlooredText($amount) {
if($amount < 1000) {
return floor($amount/100)*100;
} else {
return floor($amount/1000)*1000;
}
}
echo "We've raised over £" . getFlooredText(455) . "\n"; // 400
echo "We've raised over £" . getFlooredText(1455) . "\n"; // 1000
echo "We've raised over £" . getFlooredText(38800) . "\n"; // 38000
?>
如果你绝对不希望你总是可以做一个四层或五层if-sandwich,那么这对你所描述的想法来说是最简单的方法,但也许不是最漂亮的。这样的事情,如果我明白你要去哪里......
<?
function getRoundedText($amount) {
$n = substr($amount, -3);
if($n < 250) {
return "just over £" . round($amount, -3);
} elseif($n < 500) {
return "well over £" . round($amount, -3);
} elseif($n < 750) {
return "close to £" . round($amount, -3);
} elseif($n < 1000) {
return "almost £" . round($amount, -3);
}
}
echo "We've raised " . getRoundedText(38200) . "\n";
echo "We've raised " . getRoundedText(38400) . "\n";
echo "We've raised " . getRoundedText(38700) . "\n";
echo "We've raised " . getRoundedText(38900) . "\n";
?>
希望有所帮助。
答案 2 :(得分:0)
您可能无需更改文字...请查看floor
函数http://php.net/manual/en/function.floor.php
它总是向下舍入,所以你仍然可以说'超过'。
答案 3 :(得分:0)
我会用“约”来涵盖所有情况!