Veritabanından yuvarlak toplamına bağlı metni değiştirme

4 Cevap php

Bir web sitesinde bir MySQL veritabanı hesaplanır bir figür bağlı olarak, sitenin metinde değişiklik otomatikleştirmek için küçük bir PHP betikleri bir dizi var. Site bir bağış grubu için ve ana sayfada söz konusu metin gündeme toplam miktarı verir.

Kaldırdı miktarı veritabanından çekilen ve yakın bin yuvarlanır. Bu benim rakam yuvarlak ve toplam son üç rakamını bulmak için kullanabileceğiniz 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 £ I $ num değişkeninin $ fulltotal için 30.000 ekledim neden olan, proje ilk başladığında bir önceki bağış ekibi tarafından gündeme olmuştu tutarıdır)

Currently the text reads:
the bookstall and other fundraising events have raised more than &pound;<? echo number_format($ftotalr); ?>

PHP, yakın bin yuvarlama çünkü ben sadece bu olsa fark ettik, toplam Kullanıcı örneğin 39.200 £ ve onu daha fazla 40.000 £ yanlıştır, ve bu durumda bunu gerek söylemek için, £ 40.000 yuvarlatıldığında 'neredeyse 40.000 £' veya benzer bir şey söylemek için. Açıkçası bir değişken ile 'daha fazla' değiştirmeniz gerekir.

Açıkçası ben toplam örneğin £ 39,2000 için ise, metin 'biraz üzerinde' okurdum böylece £ 39.250 ile £ arasında ise toplam son üç rakam, yakın 0 veya 1000 olup olmadığını test etmek gerekir 'over', £ 39.400 ve 39.700 £ 'aşkın' gibi bir şey, arasında ve £ 39.700 ve 39.999 £ arasında 'neredeyse.' gibi bir şey 39400

/ Ben bir değişken olarak toplam son üç rakamını başardı ettik ve ben bir / else / elseif eğer kod bloğu (değil emin doğru bir yaklaşım olurdu, ya da davayı kullanmak isteyip çeşit gerektiğini düşünüyorum ) kırmak, ve açıkçası ben rakam kriterleri karşılarsa, ama ben bunu nasıl bilemiyorum olmadığını kontrol etmek zorunda kalacağım. Herkes ne bu lütfen yapmak için en iyi yol olacağını önerebilirsiniz?

4 Cevap

Bunun yerine iç içe if else blokları, bir switch case açıklamada değişkeni atmak ve belirli bir davaya doğru {[dönmek dolar miktarı ve işlevinin içine alır bir işlevi olabilir (2)]} d 'metin.

Anahtarı vakaların birkaç if else tablolar üzerinden okunabilirliği sağlamak. Eğer coIde örnekler ihtiyacınız varsa, bana bildirin.

Update:

Tamsayılar karşılaştırmalar sadece, switch case iyi bahistir. , Bir boolean değer neden koşullarını kıyaslamayı kullanırken if else ne ihtiyaç vardır.

Senin kod aldı ve case olmak if else açık ve burada bir örnek çıkış gibi görünüyor ne demişti:

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!"

Lizard kat, değerini işaret ve her zaman "tamam" demek gibi basit ve en zarif çözüm imho olurdu. Hatta şöyle bir şey yanındaki 100 ilk-1000 sorunu ve bunun altında zemin şey için istisna yapmak ya da olabilir ...

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

Kesinlikle her zaman dört ya da beş katman yapabileceğini istemiyorsanız eğer-sandviç, bu güzel tarif ama belki fikri doğru kolay bir yaklaşım olacaktır. Böyle bir şey, onunla gittiğini anladım eğer ...

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

Umut olur.

Sen floor fonksiyonuna bir göz atın ... metni değiştirmek için gerek olmayabilir http://php.net/manual/en/function.floor.php

O zaman aşağı yuvarlamak olacak, bu yüzden hala 'daha fazla' diyebilirsiniz.

Ben bütün davaları kapsayacak şekilde "yaklaşık" kullanmak istiyorsunuz!