2

在一个网站上,我有一些小的 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 = 圆形($num);
$string = $roundnum;
$length = strlen($string);
$字符 = 3;
$start = $length - $characters;
$string = substr($string, $start,$characters);
$图 = $字符串;

(30,000 英镑是前一个筹款团队从项目刚开始时筹集的金额,这就是为什么我在 $fulltotal 中为 $num 变量添加了 30000)

目前案文如下:
the bookstall and other fundraising events have raised more than &pound;<? echo number_format($ftotalr); ?>

我刚刚意识到,因为 PHP 四舍五入到最接近的千位,如果总数为 39,200 英镑并且四舍五入为 40,000 英镑,说它超过 40,000 英镑是不正确的,在这种情况下我需要它说“差不多 40,000 英镑”或类似的东西。我显然需要用变量替换“超过”。

显然,我需要测试总数的最后三位数字是否更接近于 0 或 1000,因此如果总数为 39,2000 英镑,则文本将显示为“刚刚结束”,如果它在 39,250 英镑和 39,250 英镑之间39,400 英镑“超过”,39,400 英镑到 39,700 英镑之间,“差不多”,39,700 英镑到 39,999 英镑之间,“差不多”。

我设法将总数的最后三位数字作为变量,我认为我需要某种 if/else/elseif 代码块(不确定这是否是正确的方法,或者是否使用 case/ break),显然我将不得不检查这个数字是否符合每个标准,但我不知道该怎么做。谁能建议最好的方法是什么?

4

4 回答 4

1

代替嵌套if else块,您可以使用一个函数来接收美元金额,并在函数内部将变量放入switch case语句中,并在特定情况下返回正确echo的 'd 文本。

Switch case 提供了多个if else语句的可读性。如果您需要代码示例,请告诉我。

更新:

仅对整数进行比较switch case是最好的选择。在比较导致布尔值的条件时,if else您需要使用 using。

我已经获取了您的代码并将其切换为caseif else这是示例输出的样子:

function qualifier($figure) {
        if ($figure < 249) return "just over";
        elseif ($figure < 399) return "over";
        elseif ($figure < 699) return "well over";
        elseif ($figure < 999) return "almost"; 
        else return "No number entered";
     }
     
echo "We are " . qualifier(250) . " our goal!";
// outputs: "We are over our goal!"
于 2010-04-11T16:44:41.233 回答
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 &pound;" . getFlooredText(455) . "\n"; // 400
echo "We've raised over &pound;" . getFlooredText(1455) . "\n"; // 1000
echo "We've raised over &pound;" . getFlooredText(38800) . "\n"; // 38000
?>

如果你绝对不希望你总是做一个四五层的if-sandwich,这将是实现你所描述的想法的最简单的方法,但可能不是最漂亮的。像这样的东西,如果我明白你要去哪里...

<?
function getRoundedText($amount) {
    $n = substr($amount, -3);
    if($n < 250) {
        return "just over &pound;" . round($amount, -3);
    } elseif($n < 500) {
        return "well over &pound;" . round($amount, -3);
    } elseif($n < 750) {
        return "close to &pound;" . round($amount, -3);
    } elseif($n < 1000) {
        return "almost &pound;" . 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";
?>

希望有帮助。

于 2010-04-11T18:34:35.933 回答
0

我会使用“大约”来涵盖所有情况!

于 2010-04-11T16:44:58.140 回答
0

您可能不需要更改文本...看看floor函数http://php.net/manual/en/function.floor.php

它总是会向下取整,所以你仍然可以说“超过”。

于 2010-04-11T16:30:56.330 回答