<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.preg-replace-callback-array" xmlns="http://docbook.org/ns/docbook">
 <refnamediv>
  <refname>preg_replace_callback_array</refname>
  <refpurpose>Perform a regular expression search and replace using callbacks</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type class="union"><type>string</type><type>array</type><type>null</type></type><methodname>preg_replace_callback_array</methodname>
   <methodparam><type>array</type><parameter>pattern</parameter></methodparam>
   <methodparam><type class="union"><type>string</type><type>array</type></type><parameter>subject</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>limit</parameter><initializer>-1</initializer></methodparam>
   <methodparam choice="opt"><type>int</type><parameter role="reference">count</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
  </methodsynopsis>
  <para>
   The behavior of this function is similar to
   <function>preg_replace_callback</function>, except that callbacks are
   executed on a per-pattern basis.
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>pattern</parameter></term>
     <listitem>
      <para>
       An associative array mapping patterns (keys) to <type>callable</type>s (values).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>subject</parameter></term>
     <listitem>
      <para>
       The string or an array with strings to search and replace.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>limit</parameter></term>
     <listitem>
      <para>
       The maximum possible replacements for each pattern in each
       <parameter>subject</parameter> string. Defaults to
       <literal>-1</literal> (no limit).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>count</parameter></term>
     <listitem>
      <para>
       If specified, this variable will be filled with the number of
       replacements done.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>flags</parameter></term>
     <listitem>
      <para>
       <parameter>flags</parameter> can be a combination of the
       <constant>PREG_OFFSET_CAPTURE</constant> and
       <constant>PREG_UNMATCHED_AS_NULL</constant> flags, which influence the
       format of the matches array.
       See the description in <function>preg_match</function> for more details.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   <function>preg_replace_callback_array</function> returns an array if the
   <parameter>subject</parameter> parameter is an array, or a string
   otherwise. On errors the return value is &null;
  </para>
  <para>
   If matches are found, the new subject will be returned, otherwise
   <parameter>subject</parameter> will be returned unchanged. 
  </para>
 </refsect1>

 <refsect1 role="errors">
  &reftitle.errors;
  &pcre.pattern.warning;
 </refsect1>

 <refsect1 role="changelog">
  &reftitle.changelog;
  <para>
   <informaltable>
    <tgroup cols="2">
     <thead>
      <row>
       <entry>&Version;</entry>
       <entry>&Description;</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>7.4.0</entry>
       <entry>
        The <parameter>flags</parameter> parameter was added.
       </entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>preg_replace_callback_array</function> example</title>
    <programlisting role="php">
<![CDATA[
<?php
$subject = 'Aaaaaa Bbb';

preg_replace_callback_array(
    [
        '~[a]+~i' => function ($match) {
            echo strlen($match[0]), ' matches for "a" found', PHP_EOL;
        },
        '~[b]+~i' => function ($match) {
            echo strlen($match[0]), ' matches for "b" found', PHP_EOL;
        }
    ],
    $subject
);
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
6 matches for "a" found
3 matches for "b" found
]]>
    </screen>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><link linkend="pcre.pattern">PCRE Patterns</link></member>
    <member><function>preg_replace_callback</function></member>
    <member><function>preg_quote</function></member>
    <member><function>preg_replace</function></member>
    <member><function>preg_last_error</function></member>
    <member><link linkend="functions.anonymous">Anonymous functions</link></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
-->