カウント値の整形
そふぃのPHP入門 >> サンプルスクリプト >> カウンター >> カウント値の整形

カウント値の整形

カウント値の整形

通常取得するカウント値は値が1ずつ上がっていきますので例えばカウント値が「20」なら表示も当然「20」となります。

ここではこの表示桁数をコントロールして「0020」などのように桁数を変えて表示する方法を説明します。常に同じ桁数で表示させたい場合や現在の桁数と表示させたい桁数が違う場合などに便利です。

普通に考えると、カウント値の前に「0」を2つ出力すればいいような気になりますが、その場合カウント値が3桁(例えば「100」)になった場合の表示は「00100」となってしまいます。

ここで作成するカウンターでは常に決められた桁数で表示する事ができますが、このように元々の値をある決まった形式(今回の場合は自分で決める桁数)に整形する事を「フォーマット」と呼びます。

例えば桁数が7桁のカウンターを作ると下のようなカウンターになります。

あなたは0025532人めのお客様です

printf関数で桁数の整形

では、値のフォーマットはどのようにしたらできるかというとここでもPHPの関数の出番です。今回使うのはprintf()関数という値を整形して出力するための関数です。この関数は値の整形を勝手に行ってくれた上で出力する関数だと思って下さい。「出力する」って機能もついてるのでecho()文やprint()の代わりにこの関数を使います。

参考関数

  • printf() ---- 文字列をフォーマットして出力する

書式

  • printf( string format [, mixed args ... ] )

第1引数にフォーマット形式を指定すると指定した形式に従ってフォーマットしてから出力してくれます。フォーマット形式の指定方法が定められていますので、その形式に従ってフォーマット文字を記述します。どういう記述形式かは後ほど触れる事にしますが、定められた形式の文字(フォーマット文字)以外はそのまま出力されます。
>> 文字列関数(フォーマット文字)

第2引数以降は省略可能なオプション引数で、フォーマットしたい値を指定します。第2引数の値が第1引数のフォーマット部分と交換して出力されます。このprintf()関数では第2引数以降、複数指定が可能です。よーするに引数を2個指定しても3個指定してもいいという事ですが、第1引数でのフォーマット部分が複数ある場合は、1つ目のフォーマット部分が第2引数、2つ目のフォーマット部分が第3引数・・・・・というように順番に交換されます。

実際にどのようにPHPスクリプトを記述するかを見てみたいと思います。ここでは現在のカウント値が「125」、整形する桁数は6桁として記述します。

整形の基本

  1. <?php
  2. $count = 125;
  3. printf("%06d", $count); //$countの値を%06d形式に変換してから出力
  4. ?>

出力結果

000125

フォーマット形式というのが「%06d」の部分なのですが、これは「6桁の整数値に変換し、空白は0で埋める」という意味になります。

ここで使用している「0」「6」「d」などがフォーマット形式を指定する特殊な文字列で、指定子と呼ばれます。指定子は%の後に続けて記述していきます。

ここでは細かい説明は省きますが、それぞれ「0」が空白を埋める値を指定する指定子(パディング指定子)・「6」が最低表示桁数を指定する指定子(表示幅指定子)・「d」が値の型を指定する指定子(型指定子)となっています。

「0」は空白だった場合には「0」で埋めるという意味を持ち、「6」は最低でも6桁で表現するという意味、「d」は整数型を意味します。

最小表示桁数(ここでは6)はあくまでも最小値なので、値が7桁ある場合はちゃんと7桁で表現されます。

さて、指定子に関してはどの文字がどういう意味を持つかはPHPで定められているものです。
>> 文字列関数(フォーマット文字)

今回は「%」「0」「6」「d」だけ覚えておいて下さい。

% フォーマット部分を示す文字。各指定子は%の後に続けて記述しなければならない。
0 幅の空白を埋める文字。空白か0が選べる。デフォルトでは空白で埋まるため今回は0を指定。
6 最低表示桁数。桁数がこの指定数を超えた場合でも超えた分もちゃんと表示される。
d 整数型を表す。これによって値が整数であってもなくても整数値に変換される。指定子の中でもこの型指定子は必ず指定しなければならない。この他には浮動小数点型の「f」や文字列型の「s」などがある。

型指定子ですが、今回のカウンタースクリプトでは整数型の「d」しか使いません。

カウンタースクリプト

長々と説明してきましたがここからやっとカウンターのサンプルスクリプトを紹介します。

カウンターサンプル

  1. <?php
  2. $fp = fopen( "count.txt", "r+" ); //ファイル開く
  3. $count = fgets( $fp, 10 ); //値読み取り
  4. $count++; //値+1(カウントアップ)
  5. rewind( $fp ); //ファイルポインタを先頭に戻す
  6. fputs( $fp, $count ); //値書き込み
  7. fclose( $fp ); //ファイル閉じる
  8. printf("あなたは%08d人目のお客様です。",$count); //カウント値を8桁に整形して出力
  9. ?>

出力結果

あなたは00025531人目のお客様です。

指定子の部分(%08d)以外はそのまま出力されるので第1引数にはお好きな文字列を指定してみて下さい。

ここではその他のスクリプトの部分に関しては説明を省きます。その他の部分に関しては基本のカウンターと全て同じですのでそちらをご覧下さい。

桁数と出力文字を変数化

printf()関数の部分の指定桁数と表示文字列を変数化するとこんな書き方になります。ここでは便宜上カウント値を125と固定していますが、実際に作成する際は上記のカウンターサンプルをご覧になってファイル操作を追加してカウント値を取得して下さい。

  1. <?php
  2. $count = 125; //カウント値
  3. $disp = 5; //桁数
  4. $mes = "カウント値:"; //出力する文字列
  5.  
  6. //カウント値を変数で指定した桁数に整形して出力
  7. printf($mes."%0".$disp."d", $count);
  8. ?>

出力結果

カウント値:00125

sprintf関数で整形値を変数に代入

printf()関数ではフォーマットした値を出力していましたが、この「出力」という機能を省き、代わりに値を返してくれる関数がsprintf()関数です。

つまり、sprintf()関数を使うと整形値を出力したくない場合でも値の取得ができます。printf()関数では値の取得と同時に出力までしてしまうので、変数に代入しておいて後から使うような処理の時にはsprintf()関数の方が便利です。

書式や指定子などはすべてprintf()関数と同じです。

参考関数

  • sprintf() ---- フォーマットされた文字列を取得する

書式

  • string sprintf( string format [, mixed args ] )

桁数と出力文字を変数化(sprintf関数)

このsprintf()関数を使うと上記の桁数と出力文字を変数化のスクリプトがこんな風に書けます。ここでも便宜上カウント値は125で固定とさせて頂きます。実際にPHPで作成する際は上記のカウンターサンプルをご覧になってファイル操作を追加してカウント値を取得して下さい。

  1. <?php
  2. $count = 125; //カウント値
  3. $disp = 5; //桁数
  4.  
  5. $mes = sprintf("トータルカウント:%0".$disp."d人", $count); //整形値を変数に代入
  6. echo $mes; //出力
  7. ?>

出力結果

トータルカウント:00125人