Search

検索したいワードを入力してください

2019年04月10日

PHPのsprint関数の使い方の解説と型指定子の一覧

PHPのsprintf関数を使うと変数の値を簡単にフォーマットすることができます。sprintf関数の引数にはフォーマット文字列と変換指定子を指定できます。sprintf関数の代表的な使い方と、各種変換指定子について、サンプルコードを用いて解説していきます。

PHPの関数 sprintf とは

PHPでは、数値や日付を指定した書式の文字列に変換する関数が用意されています。 その1つに sprintf 関数があります。

springf関数を使えば、数値を指定した書式でフォーマットし、フォーマットした結果を string変数に格納することができます。フォーマットした数値文字列をプログラム中で使用したい場合に便利な関数です。

フォーマットされた文字列を返す

例えば管理番号を、"001"、"002"、"003" ・・・と、1から順番に頭に0を付けた形式としたい場合、プログラム内部では管理番号は数値で扱うのが適しています。数値として扱うことで、連番はインクリメントで簡単に実現できるためです。

プログラム内部では数値として扱い、表示用にはsprintf関数でフォーマットすることで、内部処理も表示処理も簡潔に実装することができます。

フォーマットにsprintf関数を使用するメリット

sprintf関数を使わなくても、文字数が不足する分だけループして"0"を付けるプログラムを書けば自前でフォーマット処理を実装することはできますが、sprintf関数を使った方が多くのメリットがあります。

sprintf関数はPHPの関数なので、正常動作が保証されていることが一番大きな理由です。わざわざ同じ機能を自作しなくても公式に保障された関数がPHPに用意されているのですから、使わない手はありません。

sprintf関数はPHPの関数なので、フォーマットを行うための関数であることが誰でも分かります。sprintf関数を使用すればフォーマット処理が簡潔に書けるので、ソースコードの見通しも良くなり、不具合のリスクも減らせます。

sprintf関数の使い方まとめ

sprintf関数の基本的な書き方

sprintf関数はPHPに組み込み済みの関数です。PHP 4 以上であれば、特に宣言することなくスクリプト中にsprintfと記述すれば使用できます。

sprintf関数の基本仕様

sprintfの引数は1つ以上で任意の数だけ渡すことができます。第一引数は「フォーマット文字列」で必須です。フォーマット文字列は任意の文字列を指定できますが、文字列中に「変換指定子」と呼ばれる記号を混ぜ込むことができます。

変換指定子がフォーマット方法を指定する記号になります。sprintfの第二引数以降に指定した値は変換指定子によってフォーマットされ、フォーマット文字列に組み込まれます。

全ての変換指定子を処理したフォーマット文字列が、sprintf関数の戻り値として返されます。

実際の使い方

sprintf関数の使い方を実際のコードを使って説明します。

引数1つでsprintf関数を使う方法

sprintf関数は引数1つ指定すれば呼び出すことができますが、一般的な使い方ではありません。

sprintf関数の第一引数はフォーマット文字列です。引数を1つ指定しただけでは、フォーマットする方法を指定することはできますが、フォーマット対象とする値を指定していないため、単なる文字列と変わらないからです。

以下にサンプルコードを示します。

<?php
$formatted_value = sprintf("ナンバー1です");
echo "${formatted_value}\n";
?>


このPHPスクリプトを実行すると、結果は以下となります。

ナンバー1です

この場合はsprintf関数を使う必要ありません。

引数2つでsprintf関数を使う方法

sprintf関数に引数を2つ渡して呼び出すのが、現実的で最も簡単な呼び出し方です。

sprintf関数の第一引数はフォーマット文字列です。第二引数はどの値をフォーマット対象とするかを指定します。

以下フォーマット文字列中の「%03s」が変換指定子です。ここに第二引数で指定した値がフォーマットされて埋め込まれます。

以下に例を挙げます。

<?php
$formatted_value = sprintf("ナンバー%03sです", 1);
echo "${formatted_value}\n";
?>


このPHPスクリプトを実行すると、第一引数の「%03s」の部分でフォーマット処理が行われます。処理対象となる値は第二引数で指定された値です。

「%03s」の詳細については後述しますが、結果は以下となります。

ナンバー001です

変換指定子さえ覚えていれば、とても簡潔な実装ができます。

引数を3つ以上指定してsprintf関数を呼び出す方法

sprintf関数は可変長引数になっており、3つ以上の引数を指定してsprintf関数を呼ぶことができます。第二引数以降の引数は全て変換指定子で変換対象となる値を指定する引数です。

第一引数のフォーマット文字列には、変換指定子をいくつも書くことができます。

フォーマット文字列中で、1番先頭のフォーマット指定子には第二引数の値が適用され、2番目のフォーマット指定子には第三引数の値が適用されます。3番目、4番目の変換指定子も同様で第四引数、第五引数・・・と対応します。

引数2つでsprintf関数を呼び出す方法と同じなので、サンプルコードについては割愛します。

フォーマット文字列を作成

sprintf関数の要となるフォーマット文字列の作成方法を解説します。

フォーマット文字列には、任意の文字列を指定することができます。ただし、"%"だけは特殊で、"%"から始まる文字は変換指定子として処理されます。"%"を変換指定子ではなく単なる文字列として扱いたい場合は"%%"と%を2つ並べて記述します。

フォーマット文字列中に変換指定子を埋め込むことで、フォーマットの方法を指定することができます。フォーマットしたい値はsprintf関数の第二引数以降、任意の数指定することができます。

以下に、目的からどの変換指定子を使ってどう書けば良いかを例示します。

N進数表記

N進数表記に変換するための変換指定子は、10進数の場合は %d、8進数の場合は%o、16進数の場合は%X、2進数の場合は%bと書きます。

以下に、17を10進数、8進数、16進数、2進数でフォーマットする例を挙げます。

<?php
$formatted_value = sprintf("10進数:%d、8進数:%o、16進数:%X、2進数:%b", 17,17,17,17);
echo "${formatted_value}\n";
?>


出力結果は以下になります。

10進数:17、8進数:21、16進数:11、2進数:10001

PHPでN進数変換をしたい場合は、sprintf関数だけで実装できます。

0で桁数を揃える

プログラミングをしていると、桁数が不足する場合に左から"0"を補いたいケースも多くあります。不足する桁数に"0"を補って揃えることも、PHPではsprintf関数を使って簡単に実装できます。

以下に、3桁になるように左から"0"埋めで桁数を揃える例を挙げます。例は「引数2つでsprintf関数を使う方法」で紹介した方法の解説です。

<?php
$formatted_value = sprintf("%03s", 17);
echo "${formatted_value}\n";
?>


%の次の"0"が"0"で桁を補うという意味です。その次の"3"が3桁を意味し、次の"s"が文字列を意味します。全て合わせると『"0"で"3"桁に揃えた文字列』という変換指定子となります。

出力結果は以下になります。

0017

変換指定子を"%-03s"とすることで、右から"0"を補うこともできます。

空白で桁数を揃える

"0"埋めで桁数を揃えるほど機会はありませんが、sprintf関数では、空白で桁数を揃えることもできます。

『"0"で"3"桁に揃えた文字列』を実現する変換指定子は"%03s"でした。『空白で"3"桁に揃えた文字列』を実現する変換指定子は"%3s"です。%の次に"0"を記述すれば"0"で揃えることを表しますが、何も書かなければ空白で揃える意味になります。
<?php
$formatted_value = sprintf("%3s", 17);
echo "${formatted_value}\n";
?>


出力結果は以下になります。

 17

この例では分かりづらいですが、先頭の1文字が空白になっています。

型指定子とは

変換指定子には、符号指定子やディング指定子、アラインメント指定子、表示幅指定子、精度指定子、型指定子があります。

各指定子の詳細な説明はPHPの関数リファレンスに掲載されています。

ここでは、その中の1つ「型指定子」について説明します。

型指定子は、第二引数以降に指定された値を何の型として扱うかを表す変換指定子です。

型指定子の一覧

型指定子「%%」

変換指定子は%から始まる文字列で定義されるため「%」という文字を表すには工夫が必要です。「%」という文字をフォーマット文字列内に指定する場合は、「%%」と記述します。

「%%」も型指定子に分類されますが、引数は不要なので注意しましょう。

N進数表記の型指定子

「N進数表記」のところで説明しましたが、型指定子を使用することで引数の値を2進数、8進数、10進数、16進数として扱うことができます。

2 進数表記の型指定子は「b」です。8進数表記の型指定子は「o」です。10進数表記の型指定子は「d」、16進数の型指定子は「x」または「X」です。

16進数は10〜15でA〜Fのアルファベットを使います。小文字のアルファベットで16進数表記する場合は「x」、大文字のアルファベットで16進数表記する場合は「X」と使い分けます。

ASCIIコードの型指定子

文字にはASCIIコード(アスキーコード)という記号が割り当てられています。引数の値を、文字に割り当てられたASCIIコードで表記する場合の型指定子は「c」です。

小数と科学記法の型指定子

型指定子を使って、引数の値を小数や科学記法として扱うこともできます。

引数を小数点数で表記する場合の型指定子は「f」または「F」です。「f」は倍精度の小数点数 double を表し、「F」は単精度の小数点数 float を表しています。

小数点数の表記には1.2e+2などの科学記法という表記もあります。引数を科学記法として表記する型指定子は「e」または「E」です。1.2e+2のようにeを小文字とする場合は「e」、1.2E+2のようにEを大文字とする場合は「E」を使用します。

小数と科学記法の型指定子には省略型が用意されています。%e と %f の組み合わせはよく使うため、「g」で代用できます。 %E と %f の組み合わせも「G」で代用できます。

その他の型指定子

引数の値を文字列として表記したい場合は、型指定子「s」を使用します。引数の値を符号なしの10進数として表記したい場合は、型指定子「u」を使用します。

これらの型指定子についても、先ほど紹介した「sprintf 関数リファレンス」に掲載されています。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related