こんにちはエンジニアのオータケです!
PHPでプログラムを書いてて数値を3桁のカンマ区切りで表示したいと思ったことはありませんか?
そんなときに使えるのが、number_format関数です。
使い方はとても簡単ですぐ使うことができます。
この記事では、
・number_formatの使い方
・number_formatのより詳細な使い方
から
・3桁カンマ区切りしてある数字のカンマを取り除きたい
・number_formatを扱う上での注意点
といった内容について解説をしていきます。
この記事を見終えることでnumber_formatをマスターすることができるでしょう!
number_formatを使ってみる
数値を3桁ごとにカンマ区切りにするには?
まず、数値を3桁ごとにカンマ区切りにするにはどうすればよいでしょうか?
for文を使って数値を一桁ずつ分解しながら地道に処理を作っていくべきでしょうか?
そういった方法でも作れなくはないですが、ちょっとつらいですよね。
PHPではnumber_formatという関数があり、この関数を使うことでとても簡単に数値を3桁ごとのカンマ区切り文字に変換してくれます。
では次の項で実際に3桁のカンマ区切りにしてみましょう!
number_formatで3桁のカンマ区切りにしてみよう
今回の記事では説明よりもサンプルコードと実行結果を見ていただいたほうが良いかと思うので早速見ていただきたいです。
<?php $money = 1000000; echo number_format($money); ?>
実行結果:
1,000,000
はい。もはや説明の必要もないくらいに簡単ですよね。
number_formatの引数に数値を与えることで3桁カンマ区切りにしたものが戻り値として帰ってきます。
この時カンマ区切りになっているため戻り値は数値ではなく文字列であることに注意しなければなりません。
次の章ではnumber_formatを使って小数点以下の桁を表示する方法について解説をします。
number_formatで小数点を扱いたい場合
number_formatではいくつか引数を与えることで様々な形に加工して戻り値を得ることができます。
例えば、第一引数に3桁のカンマ区切りにしたい数値、第二引数に何らかの数値を入れてみるとどうなるでしょうか。
次のサンプルコードで実際に見てみましょう。
<?php $money = 1000000; echo number_format($money,1) . "\n"; echo number_format($money,3) . "\n"; echo number_format($money,10) . "\n"; ?>
実行結果:
1,000,000.0 1,000,000.000 1,000,000.0000000000
「“\n”」という部分については改行を意味しています。
今回では表示を見やすくするために使っています。
さて、今回のサンプルコードを見てなにか気が付きませんか?
先程のソースコードと違い、表示結果に小数点以下の数値が表示されています。
そして、その小数点以下の表示桁は第二引数で指定された分だけ表示されていることがわかるかとおもいます。
一番最後の「number_format($money,10) 」では小数点以下の桁を10桁表示しています。
さらにこんな使い方もあるnumber_format
実はnumber_formatの引数は2つだけではありません。
実際には4つあります。
今解説してきたのは第一引数と第二引数になりますが残り2つどういった引数があるのでしょうか?
こちらも動きがわかりやすいのでサンプルコードを先に提示します。
<?php $money = 1000000; echo number_format($money,1, '#', '?'); ?>
実行結果:
1?000?000#0
第三引数と第四引数には文字を指定しています。
その結果実行結果では第三引数で指定した「#」が小数点「.」の代わりに、第四引数で指定した「?」が桁区切りの「,」の代わりに表示されるような仕組みになっています。
この機能使うのでしょうか?
ほぼ使うことはないかと思いますが、公式ドキュメント上では次のようにされています。
例えばフランスの表記法では、通常カンマ (‘,’) を小数の区切りとした二桁の小数と、千位毎の区切りとしてスペース (‘ ‘) を用います。数値を書式設定するさまざまな方法を次の例で示します。
// フランスの表記
$nombre_format_francais = number_format($number, 2, ‘,’, ‘ ‘);
// 1 234,56
引用元:http://php.net/manual/ja/function.number-format.php
こういった理由で引数に細かく情報を与えることでカスタマイズできるような仕組みになっているのですね!
ここまでは数値を3桁のカンマ区切りの数字にするということをしてきましたが、今度は逆に3桁のカンマ区切りの数字をカンマ区切りなしに変えるにはどうすればよいかということをやっていきたいと思います。
3桁ごとカンマ区切りのカンマを除去したい
この章では3桁ごとにカンマ区切りされた文字列「1,000,000」を「1000000」のようにカンマをなくすためにはどうすればよいかを解説していきたいと思います。
この場合for文で・・・・と行きたいところですが、やっぱり地道にforを使って処理をするのはやや辛いです。
そこで文字列を操作する関数str_replaceを使います。
このstr_replace関数では特定の文字を別の文字に置換することができるという関数です。
では早速サンプルコードを見てみましょう。
<?php $money = '1,000,000'; echo str_replace(',', '',$money); ?>
str_replace関数では第一引数に置換をしたい対象の文字を指定します。
今回の場合は「,」を消したいのでその消したい文字である「,」を指定します。
次に第二引数には置換後の文字列を指定します。
今回は空文字を指定していますが、こうすることで「,」を「」という何もない状態に置換することができます。
これで置換という手法を使って実質的に「,」を取り除くことに成功しました。
とても簡単な方法なので覚えておきましょう!
number_formatを使う時の注意点
最後に、number_formatを使う上での注意点について解説しておきます。
まずこの内容は中級者向けの内容であるため、まだ良く内容を理解できない方については飛ばしていただいて構いません。
ただ、9000兆以上の数値をnumber_formatで扱うのはやめるべきということを覚えておけばよいでしょう。
どういうことなのか、詳しくは次の記事で紹介されています。
http://d.hatena.ne.jp/hnw/20150524
number_format関数では第一引数がfloat型であるためfloat型で扱える最大数を超えた数値を引数に与えた場合、このような起きるというものです。
実際に9000兆という数値を3桁のカンマ区切りにして使うような状況が発生するかと言われればほぼないように感じますが覚えておいたほうがいいでしょう。
まとめ
さて、いかがだったでしょうか?
number_formatの使い方だけでなく3桁のカンマ区切りの文字からカンマを除去したり、number_formatの注意点について解説してきました。
これらの内容を踏まえた上で楽しくPHPでコードを書いていってくださいね!