2

Webサイトには、MySQLデータベースから計算された数値に応じて、サイトのテキストへの変更を自動化するための小さなPHPスクリプトがいくつかあります。このサイトは募金グループ向けであり、ホームページの問題のテキストは募金総額を示しています。

調達額はデータベースから取得され、千の位に四捨五入されます。これは、図を丸めて合計の最後の3桁を見つけるために使用する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変数の$fulltotalに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」またはそれに類似したものと言います。明らかに、「以上」を変数に置き換える必要があります。

明らかに、合計の最後の3桁が0または1000に近いかどうかをテストする必要があります。たとえば、合計が39,2000ポンドの場合、39,250ポンドから39,250ポンドの間であれば、テキストは「ちょうど上」になります。 39,400ポンドは「オーバー」、39,400ポンドから39,700ポンドは「ウェルオーバー」、39,700ポンドから39,999ポンドは「ほぼ」のようなものです。

合計の最後の3桁を変数として取得できたので、何らかのif / else / elseifコードブロックが必要だと思います(それが正しいアプローチかどうか、またはユースケース/を使用するかどうかはわかりません)。ブレーク)、そして明らかに、図が各基準を満たしているかどうかを確認する必要がありますが、それを行う方法がわかりません。誰かがこれを行うための最良の方法を提案できますか?

4

4 に答える 4

1

ネストされたif elseブロックの代わりに、金額を受け取り、関数内でステートメントに変数をスローし、特定の場合に正しいテキストswitch caseを返す関数を使用できます。echo

スイッチケースは、いくつかのif elseステートメントで読みやすさを提供します。coIdeの例が必要な場合は、お知らせください。

アップデート:

整数のみで比較を実行するswitch caseのが最善の策です。ブール値になる条件を比較する場合は、を使用if elseする必要があります。

私はあなたのコードを取り、に切り替えました、caseそしてif 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

リザードが指摘したように、最も単純で最もエレガントな解決策は、価値を低くし、常に「オーバー」と言うことです。最初の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
?>

サンドイッチの場合、常に4層または5層を実行できることを絶対に望まない場合は、説明したアイデアに対する最も簡単なアプローチですが、最も美しいとは言えません。あなたがそれでどこに行くのか私が理解したなら、このような何か...

<?
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

テキストを変更する必要はないかもしれません...floor関数http://php.net/manual/en/function.floor.phpを見てください

常に切り捨てられるため、「以上」と言うことができます。

于 2010-04-11T16:30:56.330 に答える
0

私はすべてのケースをカバーするために「ほぼ」を使用します!

于 2010-04-11T16:44:58.140 に答える