第12回 スケジューラーを作ろう(3) - データの書式整形と一覧表示 - - PHP基礎講座

PHP講座 HTML×CSS 初級編

Saity先生のPHP基礎講座

Lecutures on PHP

第12回 スケジューラーを作ろう(3) - データの書式整形と一覧表示 - (その1)

 このエントリーをはてなブックマークに追加

  • さて、第12回を始めることにしよう。前回のソースコードは、ちゃんと復習しておいたかな?
  • はいは~い!

sprintfの使い方

  • あ、そういえばsprintfっていう新しい関数を使いましたよね。マニュアルは読んだんですけど、やっぱり使い方が良く分からないんですよぉ。
  • なるほどね。この関数はC言語などの時代からあるもので、使いこなしたらとっても便利なんだよ!では、その部分のコードを見てみよう。
$schedule_date = sprintf("%04d%02d%02d", $year, $month, $day);
  • sprintf関数のマニュアルによると、「フォーマットされた文字列を返す」とあるよね。要するに、第1引数で指定した文字列のフォーマット(書式)に従って、第2引数以降の引数の値を整形するんだ。
  • んんん??
  • 今回の例でいうと、以下のような感じかな。

sprintfの使用例

  • ふむ。。。%04d、%02dの部分に、第2引数以降の値が置き換えられるわけですね。
  • そう。難しくしているのは、このフォーマットの書き方だよね。
  • そうなんですよぉ。
  • %04dは、「引数を整数として扱い、その数値が3桁以下の場合は最初に0をつけ、4桁にして出力する」という事なんだ。

sprintfのフォーマットの書き方

  • むむー。先生の言ってることは、多少理解に時間が掛かったけど、意味は分かった。
  • たとえば、%dとするだけでも構わない。ただしこの場合は、最初に0がつかないんだ。
  • なるほどね。他にどんな書き方があるのかしら?
  • 本当に色々な指定ができるから、マニュアルのサンプルを見るのが一番いいよ。ここでは、他のよく使う書き方を学んでみよう。
  • はーい!
  • まずは、数値の代わりに文字列を出力したい場合。これには「%d」の代わりに「%s」を用いるんだ。たとえば、
print(sprintf("こんにちは、%sさん!", $nickname));

とすると、文字列が埋め込まれるよ。
これだけなら、

print("こんにちは、".$nickname."さん!");
print("こんにちは、$nicknameさん!");

と書く場合と結果は違わないね。

~ Saity先生のワンポイント講座 ~

ダブルクォート「"」内での変数展開

ダブルクォート「

上記のprint関数の中で、$nicknameという変数がダブルクォートで囲われた文字列の中にそのまま書き込まれているのに気づいたかな?

普通に考えたら、この部分はそのまま「こんにちは、$nicknameさん!」と表示されてしまうはずで、正しくは次のように書かなきゃいけないはずだ。

 

print("こんにちは、" . $nickname . "さん!");

もちろん、このやり方は正しくて、ちゃんと表示される。だけど、実はPHPにはダブルクォートの中にある変数もきちんと変数として認識する、という機能があるんだ。

だから、本文のprint("こんにちは、$nicknameさん!");というprint文でも、ちゃんと$nicknameが正しく変数の中の値が表示されるんだよ。

  • ふむふむ。
  • そして、先ほどと同じように、%とsの間に数字を入れることで、指定した長さに揃えることができる。たとえば、
print(sprintf("こんにちは、%10sさん!", $nickname));

とすると、$nicknameの文字を10文字の右揃えにして出力するんだ。

  • あれれ?$nicknameに「あいうえお」っていれても、右揃えになりませんよ!?
  • それは全角だからだな。PHPは内部的に、文字をバイト(半角文字の1つ分)で計算している。半角、たとえば「abde」で実行すると、以下のようになるよ。
<?php
$nickname 
"abcd";
echo 
"<pre>";
print(
sprintf("%010s\n"$nickname));
print(
sprintf("%10s\n"$nickname));
print(
sprintf("%-10s\n"$nickname));
echo 
"</pre>";
?>

sprintfの実行結果

  • なるほど~。なんとなく違いが分かったわ。
  • うんうん。最後の例のように、マイナスを付けると左揃えになる。そうしないと、2番目の例のように右揃えになるんだ。
  • おおー、レベルアーップ☆
  • 最後に言うと、printfっていう関数もある。こちらは、結果を文字列で返すのではなく、そのまま画面に出力するんだ。
  • 他にもvsprintfとかvprintfっていう似たような関数もあるんですね。なるほど、こちらは第2引数以降を続ける代わりに配列を引数とするワケか。
  • 1
  • 2

  



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)