10M(10000 000を表す)や100Kなどの数値で作業したいのですが、PHPにすでに存在する関数はありますか、それとも独自の関数を作成する必要がありますか?
私は次の線に沿って何かを考えています:
echo strtonum("100K"); // prints 100000
また、それをさらに一歩進めて反対のことを行うと、100000から100Kを変換して取得するための何かがありますか?
10M(10000 000を表す)や100Kなどの数値で作業したいのですが、PHPにすでに存在する関数はありますか、それとも独自の関数を作成する必要がありますか?
私は次の線に沿って何かを考えています:
echo strtonum("100K"); // prints 100000
また、それをさらに一歩進めて反対のことを行うと、100000から100Kを変換して取得するための何かがありますか?
これには組み込み関数がないため、独自の関数を作成できます。アイデアを与えるには:
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
これは少しやり過ぎかもしれませんが:)
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);
}
?>