-3

10M(10000 000を表す)や100Kなどの数値で作業したいのですが、PHPにすでに存在する関数はありますか、それとも独自の関数を作成する必要がありますか?

私は次の線に沿って何かを考えています:

echo strtonum("100K"); // prints 100000

また、それをさらに一歩進めて反対のことを行うと、100000から100Kを変換して取得するための何かがありますか?

4

2 に答える 2

5

これには組み込み関数がないため、独自の関数を作成できます。アイデアを与えるには:

function strtonum($string)
{
    $units = [
        'M' => '1000000',
        'K' => '1000',
    ];

    $unit = substr($string, -1);

    if (!array_key_exists($unit, $units)) {
        return 'ERROR!';
    }

    return (int) $string * $units[$unit];
}

デモ: http://codepad.viper-7.com/2rxbP8

またはその逆:

function numtostring($num)
{
    $units = [
        'M' => '1000000',
        'K' => '1000',
    ];

    foreach ($units as $unit => $value) {
        if (is_int($num / $value)) {
            return $num / $value . $unit;
        }
    }   
}

デモ: http://codepad.viper-7.com/VerRGDs


本当にファンキーになりたい場合は、それらすべてをクラスに入れて、実行する変換を決定させることができます。

<?php

class numberMagic
{
    private $units = [];

    public function __construct(array $units)
    {
        $this->units = $units;
    }

    public function parse($original)
    {
        if (is_numeric(substr($original, -1))) {
            return $this->numToString($original);
        } else {
            return $this->strToNum($original);
        }
    }

    private function strToNum($string)
    {
        $unit = substr($string, -1);

        if (!array_key_exists($unit, $this->units)) {
            return 'ERROR!';
        }

        return (int) $string * $this->units[$unit];
    }

    private function numToString($num)
    {
        foreach ($this->units as $unit => $value) {
            if (is_int($num / $value)) {
                return $num / $value . $unit;
            }
        }   
    }
}

$units = [
    'M' => 1000000,
    'K' => 1000,
];
$numberMagic = new NumberMagic($units);
echo $numberMagic->parse('100K'); // 100000
echo $numberMagic->parse(100); // 100K

これは少しやり過ぎかもしれませんが:)

デモ: http://codepad.viper-7.com/KZEc7b

于 2013-01-16T14:15:35.150 に答える
2

2つ目用

<?php
    #    Output easy-to-read numbers
    #    by james at bandit.co.nz
    function bd_nice_number($n) {
        // first strip any formatting;
        $n = (0+str_replace(",","",$n));

        // is this a number?
        if(!is_numeric($n)) return false;

        // now filter it;
        if($n>1000000000000) return round(($n/1000000000000),1).' trillion';
        else if($n>1000000000) return round(($n/1000000000),1).' billion';
        else if($n>1000000) return round(($n/1000000),1).' million';
        else if($n>1000) return round(($n/1000),1).' thousand';

        return number_format($n);
    }
?>
于 2013-01-16T14:11:04.563 に答える