rasmus Mon Apr 9 09:00:18 2001 EDT
Modified files:
/phpdoc/en/functions strings.xml
Log:
Document argument swapping in [s]printf format string
Index: phpdoc/en/functions/strings.xml
diff -u phpdoc/en/functions/strings.xml:1.80 phpdoc/en/functions/strings.xml:1.81
--- phpdoc/en/functions/strings.xml:1.80 Sun Mar 25 19:44:44 2001
+++ phpdoc/en/functions/strings.xml Mon Apr 9 09:00:17 2001
@@ -1915,6 +1915,48 @@
</listitem>
</orderedlist>
</para>
+ <para>
+ As of PHP version 4.0.6 the format string supports argument
+ numbering/swapping. Here is an example:
+ <example>
+ <title>Argument swapping</title>
+ <programlisting role="php">
+$format = "There are %d monkeys in the %s";
+printf($format,$num,$location);
+ </programlisting>
+ </example>
+ This might output, "There are 5 monkeys in the tree". But imagine we are
+ creating a format string in a separate file, commonly because we would like to
+ internationalize it and we rewrite it as:
+ <example>
+ <title>Argument swapping</title>
+ <programlisting role="php">
+$format = "The %s contains %d monkeys";
+printf($format,$num,$location);
+ </programlisting>
+ </example>
+ We now have a problem. The order of the placeholders in the format string
+ does not match the order of the arguments in the code. We would like to
+ leave the code as is and simply indicate in the format string which arguments
+ the placeholders refer to. We would write the format string like this
+ instead:
+ <example>
+ <title>Argument swapping</title>
+ <programlisting role="php">
+$format = "The %2\$s contains %1\$d monkeys";
+printf($format,$num,$location);
+ </programlisting>
+ </example>
+ An added benefit here is that you can repeat the placeholders without
+ adding more arguments in the code. For example:
+ <example>
+ <title>Argument swapping</title>
+ <programlisting role="php">
+$format = "The %2\$s contains %1\$d monkeys. That's a nice %2\$s full of %1\$d
+monkeys.";
+printf($format,$num,$location);
+ </programlisting>
+ </example>
+ </para>
<simpara>
See also: <function>printf</function>, <function>sscanf</function>,
<function>fscanf</function>, and <function>number_format</function>.