「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
MTで税込み計算&3桁ごとにコンマで区切る&切り捨てなど
mixiのMTのコミュニティで、以下のような質問を見かけました。
- MT4.2のカスタムフィールド(MTsale)を使用。
- 入力された金額に1.05をかけて税込表示にしたい。
- 入力される金額は3桁ごとに,区切りで、出力も同じように3桁で,区切りにしたい。 入力例. 1,999
- 出力はphp等で動的に変換せず、静的な数字としてhtmlを出力したい。
この質問に答えてみます。
1.フィールドの値を1.05倍する
質問された方は、フィールドの値からコンマを除いて1.05倍する方法として、以下のタグをあげていました。
ただ、この方法ではうまくいかなかったとのことです。
<$MTsale replace=",","" setvar="sale"$> <$MTVar name="sale" value="1.05" op="*"$>
しかし、当方で試した限りでは、この書き方で問題なく動作しました。
「カスタムフィールドに数値が全角で入力されている」「コンマではなくピリオドで区切られて入力されている」など、入力されている値に何か問題があるのではないかと思います。
2.数値を3桁ごとにコンマで区切る
Movable Type 4.2以降では、「numify」というグローバルモディファイアが追加されています。
このモディファイアは、数値を3桁ごとにコンマ等で区切って出力する働きをします。
前述の消費税計算と組み合わせると、以下のようなタグの組み方が考えられます。
<$mt:Sale replace=",","" setvar="sale"$> <mt:SetVar name="sale" value="1.05" op="*"> <mt:GetVar name="sale" numify="1">
3.切り捨て
消費税を計算すると、小数点以下の値が出ることもあります。
そこで、小数点以下を切り捨てる方法も紹介します。
MTタグだけで行うとすれば、正規表現を使って、小数点(.)から後の文字を削除する、という手法が考えられます。
変数saleの小数点以下を切り捨てて、変数sale_dに代入するとすれば、以下のように書くことができます。
<mt:SetVar name="sale_d" value="$sale"> <mt:GetVar name="sale_d" regex_replace="/(\d*)\.(\d*)/","$1" setvar="sale_d">
4.四捨五入
四捨五入は、「元の値に0.5を足して、小数点以下を切り捨てる」という方法で行うことができます。
変数saleの小数点以下を四捨五入して、変数sale_rに代入するとすれば、以下のように書くことができます。
<mt:SetVar name="sale_r" value="$sale"> <mt:SetVar name="sale_r" value="0.5" op="+"> <mt:GetVar name="sale_r" regex_replace="/(\d*)\.(\d*)/","$1" setvar="sale_r">
5.切り上げ
切り上げはやや面倒です。
ここでは、以下のような考え方をすることにします。
- 1.切り上げる元の数値を、いったん切り捨てる
- 2.1.で求めた数値と元の数値を比較する
- 3.2.で両者が同じなら、元の数値に小数点以下がなかったので、元の数値をそのまま使う
- 4.2.で両者が異なるなら、元の数値に小数点以下があったので、切り捨てた数値に1を足した値を使う
変数saleの小数点以下を切り挙げて、変数sale_uに代入するとすれば、以下のように書くことができます。
<mt:SetVar name="sale_u" value="$sale"> <mt:GetVar name="sale_u" regex_replace="/(\d*)\.(\d*)/","$1" setvar="sale_u"> <mt:Unless name="sale_u" eq="$sale"> <mt:SetVar name="sale_u" value="1" op="+"> </mt:Unless>