[PHP-DOC] cvs: phpdoc /en/functions strings.xml From: Rasmus Lerdorf (rasmus <email protected>)
Date: 04/09/01

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>.