<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.validate.set.in_array">

    <title>InArray</title>

    <para>
        <classname>Zend_Validate_InArray</classname> vous permet de valider qu'une entrée est bien présente
        dans un tableau. Ceci fonctionne aussi avec des tableaux multidimensionnels.
    </para>

    <sect3 id="zend.validate.set.in_array.options">
        <title>Options supportées par Zend_Validate_InArray</title>

        <para>
            Les options suivantes sont supportées par
            <classname>Zend_Validate_InArray</classname>&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>haystack</property></emphasis>&#160;: spécifie le tableau
                    pour la validation.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>recursive</property></emphasis>&#160;: définit si la
                    validation doit être recursive. Cette option vaut <constant>FALSE</constant>
                    par défaut.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>strict</property></emphasis>&#160;: définit si la validation
                    doit être strict (même type). Cette option vaut <constant>FALSE</constant> par
                    défaut.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.validate.set.in_array.basic">
        <title>Validation tableau simple</title>

        <para>
            Passez simplement un tableau dans lequel rechercher une valeur:
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_InArray(array('key' => 'value',
                                             'otherkey' => 'othervalue'));
if ($validator->isValid('value')) {
    // value trouvée
} else {
    // value non trouvée
}
]]></programlisting>

        <para>
            C'est le comportement exact de la fonction PHP <methodname>in_array()</methodname>.
        </para>

        <note>
            <para>
                Par défaut la validation est non stricte et ne valide pas les multiples dimensions.
            </para>
        </note>

        <para>
            Bien sûr vous pouvez fournir le tableau à valider plus tard en utilisant la méthode
            <methodname>setHaystack()</methodname>. La méthode
            <methodname>getHaystack()</methodname> retourne le tableau actuellement fourni.
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_InArray();
$validator->setHaystack(array('key' => 'value', 'otherkey' => 'othervalue'));

if ($validator->isValid('value')) {
    // valeur trouvée
} else {
    // valeur non trouvée
}
]]></programlisting>
    </sect3>

    <sect3 id="zend.validate.set.in_array.strict">
        <title>Validation tableau stricte</title>

        <para>
            Il est possible d'effectuer une validation stricte des données dans le tableau. Par défaut, il n'y aura aucune
            différence entre l'entier <emphasis>0</emphasis> et la chaine <emphasis>"0"</emphasis>. La validation stricte
            fera cette différence.
        </para>

        <para>
            Pour spécifier une validation stricte à l'instanciation de l'objet, agissez comme suit&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_InArray(
    array(
        'haystack' => array('key' => 'value', 'otherkey' => 'othervalue'),
        'strict'   => true
    )
);

if ($validator->isValid('value')) {
    // valeur trouvée
} else {
    // valeur non trouvée
}
]]></programlisting>

        <para>
            La clé <emphasis>haystack</emphasis> contient le tableau dans lequel valider. En mettant la clé
            <emphasis>strict</emphasis> à <constant>TRUE</constant>, la validation sera stricte (valeur et type).
        </para>

        <para>
            Bien sûr vous pouvez la méthode <methodname>setStrict()</methodname> pour changer ce
            réglage et la méthode <methodname>getStrict()</methodname> vous retournera le réglage
            en cours.
        </para>

        <note>
            <para>
                Notez que par défaut, <emphasis>strict</emphasis> a la valeur
                <constant>FALSE</constant>.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.validate.set.in_array.recursive">
        <title>Validation de tableaux récursifs</title>

        <para>
            En plus de la validation type <acronym>PHP</acronym> <methodname>in_array()</methodname>, ce validateur peut
            aussi être utilisé pour valider des tableaux à plusieurs dimensions.
        </para>

        <para>
            Pour cela, utilisez l'option <emphasis>recursive</emphasis>.
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_InArray(
    array(
        'haystack' => array(
            'firstDimension' => array('key' => 'value',
                                      'otherkey' => 'othervalue'),
            'secondDimension' => array('some' => 'real',
                                       'different' => 'key')),
        'recursive' => true
    )
);

if ($validator->isValid('value')) {
    // value trouvée
} else {
    // value non trouvée
}
]]></programlisting>

        <para>
            Votre tableau sera parcouru récursivement à la recherche de votre valeur. De plus
            vous pouvez utiliser la méthode <methodname>setRecursive()</methodname> pour
            paramétrer cette option plus tard et la méthode
            <methodname>getRecursive()</methodname> pour la retrouver.
         </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_InArray(
    array(
        'firstDimension' => array('key' => 'value',
                                  'otherkey' => 'othervalue'),
        'secondDimension' => array('some' => 'real',
                                   'different' => 'key')
    )
);
$validator->setRecursive(true);

if ($validator->isValid('value')) {
    // valeur trouvée
} else {
    // valeur non trouvée
}
]]></programlisting>

         <note>
            <title>Réglage par défaut pour la récursivité</title>

             <para>
                Par défaut, la récursivité n'est pas activée.
             </para>
         </note>

        <note>
            <title>Options pour la "haystack"</title>

            <para>
                Lorsque vous utilisez les clés <property>haystack</property>,
                <property>strict</property> ou <property>recursive</property> à l'intérieur
                de votre pile, vous devez alors envelopper la clé <property>haystack</property>.
            </para>
        </note>
    </sect3>
</sect2>