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


Reply via email to