1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-27 08:32:09 +01:00
Files
archived-doc-ja/reference/strings/functions/sprintf.xml
TAKAGI Masahiro 5f8d14c914 Sync with en
git-svn-id: https://svn.php.net/repository/phpdoc/ja/trunk@328348 c90b9560-bf6c-de11-be94-00142212c4b1
2012-11-13 11:30:53 +00:00

455 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 87455002a75b3308d9abbd4be7b47fbd9040d471 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.sprintf">
<refnamediv>
<refname>sprintf</refname>
<refpurpose>フォーマットされた文字列を返す</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>sprintf</methodname>
<methodparam><type>string</type><parameter>format</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>args</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>...</parameter></methodparam>
</methodsynopsis>
<para>
フォーマット文字列 <parameter>format</parameter>
に基づき生成された文字列を返します。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>format</parameter></term>
<listitem>
<para>
フォーマット文字列は 0 個以上のディレクティブ(指示子)
により構成されます。ディレクティブには、そのまま結果にコピーされる
(<literal>%</literal> を除く) 通常の文字と<emphasis>変換指定子
(conversion specifications)</emphasis> があり、
取り出される際はどちらもそれ自身がパラメータとなります。このことは
<function>sprintf</function> の場合だけでなく <function>printf</function>
の場合も同様です。
</para>
<para>
各変換指定子は、パーセント記号 (<literal>%</literal>) の後に
これらの要素が一つ以上続いたものになります。
<orderedlist>
<listitem>
<simpara>
オプションの<emphasis>符号指定子</emphasis>。これは、
数値で符号 (- あるいは +) を使用するよう指定します。
デフォルトでは、数値が負の場合の - 符号のみが使用されます。
この指定子により、正の数にも強制的に + 符号をつけることができます。
これは PHP 4.3.0 で追加されました。
</simpara>
</listitem>
<listitem>
<simpara>
オプションの<emphasis>パディング指定子</emphasis>。これは、
文字列が正しい長さになるまでどんな文字で埋めるかということを
指定します。これは空白かまたは <literal>0</literal> (文字 '0')
のいずれかです。デフォルトでは空白で埋められます。
これ以外のパディング文字を指定するには、その文字の前に
単一引用符 (<literal>'</literal>) を置きます。
後述の例を参照ください。
</simpara>
</listitem>
<listitem>
<simpara>
オプションの<emphasis>アラインメント指定子</emphasis>。これは、
結果を左寄せまたは右寄せにしたい場合に指定します。
デフォルトは右寄せです。ここで <literal>-</literal>
文字を指定すると左寄せとなります。
</simpara>
</listitem>
<listitem>
<simpara>
オプションの数字。これは<emphasis>表示幅指定子</emphasis>です。
結果を(最低)何桁にするかを指定します。
</simpara>
</listitem>
<listitem>
<simpara>
オプションの<emphasis>精度指定子</emphasis>
(ピリオド (`.') に続けてオプションで桁数指定文字列を書いたもの)。
これは、浮動小数点数に対して数字を何桁まで表示するかを指定します。
文字列に対して使用した場合は、これは切り捨て位置として働きます。
この文字数を超える文字を切り捨てられます。
</simpara>
</listitem>
<listitem>
<para>
<emphasis>型指定子</emphasis>。引数を何の型として扱うかを指定します。
指定できる型を以下に示します。
<simplelist>
<member>
<literal>%</literal> - パーセント文字。引数は不要です。
</member>
<member>
<literal>b</literal> - 引数を整数として扱い、
2 進数として表現します。
</member>
<member>
<literal>c</literal> - 引数を整数として扱い、その ASCII
値の文字として表現します。
</member>
<member>
<literal>d</literal> - 引数を整数として扱い、
10 進数として表現します。
</member>
<member>
<literal>e</literal> - 引数を科学記法として扱います
(例 1.2e+2)。
精度の指定子は、PHP 5.2.1 以降では小数点以下の桁数を表します。
それより前のバージョンでは、有効数字の桁数 (ひとつ小さい値)
を意味していました。
</member>
<member>
<literal>E</literal> - <literal>%e</literal> と同じですが、
大文字を使います (例 1.2E+2)。
</member>
<member>
<literal>u</literal> - 引数を整数として扱い、符号無しの
10 進数として表現します。
</member>
<member>
<literal>f</literal> - 引数を double として扱い、
浮動小数点数として表現します。
</member>
<member>
<literal>F</literal> - 引数を float として扱い、
浮動小数点数として表現します (ロケールに依存しません)。
PHP 4.3.10 および PHP 5.0.3 以降で使用可能です。
</member>
<member>
<literal>g</literal> - <literal>%e</literal> および
<literal>%f</literal> の短縮形。
</member>
<member>
<literal>G</literal> - <literal>%E</literal> および
<literal>%f</literal> の短縮形。
</member>
<member>
<literal>o</literal> - 引数を整数として扱い、
8 進数として表現します。
</member>
<member>
<literal>s</literal> - 引数を文字列として扱い、表現します。
</member>
<member>
<literal>x</literal> - 引数を整数として扱い、16 進数として
(小文字で)表現します。
</member>
<member>
<literal>X</literal> - 引数を整数として扱い、16 進数として
(大文字で)表現します。
</member>
</simplelist>
</para>
</listitem>
</orderedlist>
</para>
<para>
フォーマット文字列における引数の 番号付け/交換
をサポートしています。以下に例を示します。
<example>
<title>引数の交換</title>
<programlisting role="php">
<![CDATA[
<?php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
?>
]]>
</programlisting>
</example>
この出力は、"There are 5 monkeys in the tree" のようになります。
ここで、フォーマット文字列が別のファイルにある場合を考えてみましょう。
これは、出力を国際化したりする場合に行われる可能性があります。
たとえばフォーマット文字列が次のように書き換えられたとすると、
<example>
<title>引数の交換</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %s contains %d monkeys';
echo sprintf($format, $num, $location);
?>
]]>
</programlisting>
</example>
ここで、問題が発生します。フォーマット文字列における置換指示子の順番は、
コードにおける引数の順番と一致していません。
だからといってコードを変更するのではなく、
むしろ置換指示子が参照するフォーマット文字列のほうで指示を行う方が望ましいでしょう。
フォーマット文字列を次のように書き換えてみましょう。
<example>
<title>引数の交換</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location);
?>
]]>
</programlisting>
</example>
こうすることによるもうひとつの利点は、
同じ置換指示子を複数回使用する際にコードに引数を追加せずにすむことです。
例えば、次のようになります。
<example>
<title>引数の交換</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %2$s contains %1$d monkeys.
That\'s a nice %2$s full of %1$d monkeys.';
echo sprintf($format, $num, $location);
?>
]]>
</programlisting>
</example>
引数の交換を使うときには、
<emphasis>位置指定子</emphasis> <literal>n$</literal>
をパーセント記号 (<literal>%</literal>) の直後に置かなければならず、
間に他の指定を入れてはいけません。次の例を示します。
<example>
<title>位置指定子と他の指定との共用</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %2$s contains %1$04d monkeys';
echo sprintf($format, $num, $location);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
The tree contains 0005 monkeys
]]>
</screen>
</example>
</para>
<note>
<para>
<constant>PHP_INT_MAX</constant> より大きい位置指定子を指定すると、
<function>sprintf</function> は警告を発します。
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>args</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>...</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
フォーマット文字列 <parameter>format</parameter>
に基づき生成された文字列を返します。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>4.0.6</entry>
<entry>
引数の 番号付け/交換
をサポートするようになりました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title><function>printf</function> のさまざまな例</title>
<programlisting role="php">
<![CDATA[
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII コードの 65 は 'A' です
// %% に注目しましょう。これは、リテラル '%' を文字として出力します
printf("%%b = '%b'\n", $n); // 2 進表現
printf("%%c = '%c'\n", $c); // ascii 文字を表示します。chr() 関数と同じです
printf("%%d = '%d'\n", $n); // 標準の整数表現
printf("%%e = '%e'\n", $n); // 科学記法
printf("%%u = '%u'\n", $n); // 正の整数の、符号なし整数表現
printf("%%u = '%u'\n", $u); // 負の整数の、符号なし整数表現
printf("%%f = '%f'\n", $n); // 浮動小数点表現
printf("%%o = '%o'\n", $n); // 8 進表現
printf("%%s = '%s'\n", $n); // 文字列表現
printf("%%x = '%x'\n", $n); // 16 進表現 (小文字)
printf("%%X = '%X'\n", $n); // 16 進表現 (大文字)
printf("%%+d = '%+d'\n", $n); // 正の整数に符号指定子を使用
printf("%%+d = '%+d'\n", $u); // 負の整数に符号指定子を使用
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
]]>
</screen>
</example>
<example>
<title><function>printf</function> の文字列指定子</title>
<programlisting role="php">
<![CDATA[
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s); // 標準の文字列出力
printf("[%10s]\n", $s); // 空白を使用して右詰め
printf("[%-10s]\n", $s); // 空白を使用して左詰め
printf("[%010s]\n", $s); // ゼロ埋めは文字列でも可能です
printf("[%'#10s]\n", $s); // ゼロの代わりに独自の文字 '#' で埋めます
printf("[%10.10s]\n", $t); // 左詰めを行い、10 文字以上は切り捨てます
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[many monke]
]]>
</screen>
</example>
<example>
<title><function>sprintf</function>: 整数のゼロ埋め</title>
<programlisting role="php">
<![CDATA[
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
]]>
</programlisting>
</example>
<example>
<title><function>sprintf</function>: 通貨をフォーマットする例</title>
<programlisting role="php">
<![CDATA[
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money は "123.1" を出力します。
$formatted = sprintf("%01.2f", $money);
// echo $formatted は "123.10"を出力します
?>
]]>
</programlisting>
</example>
<example>
<title><function>sprintf</function>: 科学記法</title>
<programlisting role="php">
<![CDATA[
<?php
$number = 362525200;
echo sprintf("%.3e", $number); // 3.625e+8 を出力します
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>printf</function></member>
<member><function>sscanf</function></member>
<member><function>fscanf</function></member>
<member><function>vsprintf</function></member>
<member><function>number_format</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->