2013年8月5日月曜日

phpとか %d とか %s とかの話

%dとか、なに
何それ

と言うわけで調べました

sprintf


http://c-brains.jp/blog/wsg/09/12/07-172920.php



//sprintf(フォーマットを定義する文字列, [差し込む変数1, [差し込む変数2 ...]]);

$format = "%sだと%sが%sます。";

$aaaa = '毎日(日)曜日';
$bbbb  = '僕';
$cccc = '喜び';

$message = sprintf($format, $aaaa, $bbbb, $cccc);

echo $message;


ちょっと色味が悪いけど
【出力結果】

毎日(日)曜日だとます。

参考URLにもありますが
$message = "{$weekday}は{$author}が{$blog}っす。";

でも良い。
個人的に下の方が書きやすいんだけど
なんか使い道あるのかな?


そして、このフォーマットを定義する文字列に挿入する変換指定子(%で始まる要素。文字列を差し込む場合は %s となります。

えーと文字列を扱う時には%sにしろってこと?

順番を指定(%の次の1、2という数字)することができる点が、この関数の便利なところです。
%d\1とかで$aaa $bbb $cccを指定できるっぽい


$format = "%1\$sが%2\$sで%4\$sが%3\$sです。";

【1 $aaa  = '';
【2 $bbb = '';
【3 $ccc = '';
【4 $ddd = 'あなた';
                                        1     2       3       4
$message = sprintf($format, $aaa, $bbb, $ccc, $ddd);

【出力結果】
1     2     4          3
あなたです。


ちなみに
                                          4      3      2       1
$message2 = sprintf($format, $ddd ,$ccc ,$bbb , $aaa);

【出力結果】
あなたです。

になった

てことは
sprintfの順番と%1が紐付いてるってことっすね

まあ当然なんですが。
忘れやすいのでメモ



ちなみに
さっきのを%dにすると
$format = "%dだと%dが%dます。";

0だと0が0ます。
になる。



【追加】
%d10進数
%u符号無し10進数
%o符号無し8進数
%x符号無し16進数
%X符号無し16進数(大文字表記)
%e指数形式の浮動小数点
%E%eと同じ(大文字表記)
%f固定小数点形式の浮動小数点
%g%eまたは%fと同じ
%G%eまたは%fと同じ(大文字表記)
%b符号無し2進数
%c指定した文字コードに対応した文字
%s文字列
%p値のポインタ
%n文字数を指定した変数に格納
%%%の文字そのもの(\と同様の使い方)
















0 件のコメント :

コメントを投稿