[PHP] 帳票系の出力をしたときに役に立った関数

帳票のような出力をブラウザ経由で行う場合には元の数字を操作して、
tableで整形したテンプレートへ流し込むことが多いです。
しかも数字の並びに規則性がなかったり、
困ったことに複雑になりすぎて数字を結局力技で出力したりと散々なことが多いです。

PHPで帳票系の出力をした時に利用した関数の紹介をします。

1000円単位でカンマをつけて表示

¥3,000 こんな感じで数字3桁ごとにカンマをつけて出力する関数
http://php.net/manual/ja/function.number-format.php

// 文字列 = number_format(数値, 小数点以下の桁, 小数点区切り文字, 区切り数指定)
number_format(1234567);              // 1,234,567
number_format(1234567, 2);           // 1,234,567.00
number_format(1234567, 3, ' ', '-'); // 1-234-567 000

0埋めで数字を表示

000013 ←こんなの

// dだと数字型で認識
// sだとstring型
sprintf("%010s", 133); // 0000000133
sprintf("% 10s", 133); //        133
sprintf("%011d", 134); // 00000000134

配列の内容を結合して表示

tableの一つのセルの中に複数の数字を入れる場合によく使っています。
foreachを利用して存在する数だけ繰り返してもいいのですが、
処理の行数が長くなってしまうのでこちらを利用しています。

$array = ('100', '200', '300');
$lineData = implode("<br>", $array); // 100<br>200<br>300

指定の文字列で区切って配列にする

入力されたデータを一度配列に整形するために利用しています。

$lineData = 'aaa,bbb,ccc,ddd';
$arrayData = explode(",", $lineData);
$lineData[0]; // aaa
$lineData[1]; // bbb

CSVでダウンロード

やっとテーブルで複雑な帳票を出力して表示できたと思ったら、
こんどはエクセルで編集できる形ででちょーだい。
と言われるのはいつものことなので表示したデータをCSVでダウンロードできるようにします。
エクセルで開けるようにsjisに変換してcsvヘッダを送ってダウンロードできるようにしています。

$csv = array(
    array('aaa', 'bbb', 'ccc'),
    array('ddd', 'eee', 'fff'),
);

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=hoge.csv');
foreach ($csv as $data)
{
    echo mb_convert_encoding(implode(',', $data) . "\r\n", 'sjis', 'utf-8');
}

だいたいこんな感じの関数が帳票を作成する際に役に立ちました、
データを作成する部分は様々なところからデータを取得して、
配列に入れて出力する部分で一気にforeachなんかでtableの中身を出力する方法が多いです。
勝手な思い込みですが帳票だと堅苦しい人たちが利用するイメージがあって、
IEやらアクセス制限で表示されないトラブルが多い気がしますので、
jQueryやjsrenderやらを利用しない方がいいかもしれません。