Position actuelle: Accueil> Derniers articles> Comment utiliser IS_ARRAY pour déterminer si la structure des éléments du tableau répond aux attentes? Analyse détaillée

Comment utiliser IS_ARRAY pour déterminer si la structure des éléments du tableau répond aux attentes? Analyse détaillée

gitbox 2025-09-12

Dans PHP, is_array () est la fonction intégrée la plus directe pour déterminer si une variable est un tableau. Cependant, "si la structure de l'élément de tableau répond aux attentes " ne consiste généralement pas seulement à juger que la variable est une table et les meilleures pratiques.


1. Examen des concepts de base

  • is_array ($ v) : détermine si $ v est un tableau (renvoie vrai ou faux ).

  • isset ($ arr ['key']) et array_key_exists ('key', $ arr) : déterminez si la clé existe; ISSET déterminera également que la valeur n'est pas nulle .

  • Fonctions de vérification de type: is_int () , is_string () , is_bool () , is_float () , etc.

  • Vérification de la combinaison: IS_Array () est généralement utilisée en combinaison avec l'existence clé et la vérification de type pour déterminer si un élément "est conforme à la structure attendue".


2. La vérification la plus simple: déterminez si la variable est un tableau

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isArraySimple</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$var</span></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$var</span></span><span>);
}

</span><span><span class="hljs-variable">$a</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-string">"not an array"</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">isArraySimple</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">isArraySimple</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>

Remarque: il s'agit de l'étape la plus élémentaire. Toute vérification structurelle plus complexe doit être effectuée sous la prémisse qui est_Array () est vraie .


3. Vérifiez que le tableau associatif contient les champs (clés) et les types attendus

Scénario: J'espère recevoir un tableau d'informations utilisateur, la structure est la suivante:

 <span><span>[
  'id' =&gt; int,
  'name' =&gt; string,
  'email' =&gt; string,
  'meta' =&gt; array (Facultatif,S&#39;il existe, ce devrait être un tableau)
]
</span></span>

Exemple d'implémentation:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateUser</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">array</span></span></span><span> </span><span><span class="hljs-variable">$arr</span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
    </span><span><span class="hljs-comment">// Champs requis</span></span><span>
    </span><span><span class="hljs-variable">$required</span></span><span> = [</span><span><span class="hljs-string">'id'</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span>, </span><span><span class="hljs-string">'email'</span></span><span>];

    </span><span><span class="hljs-comment">// Tout d&#39;abord, c&#39;est un tableau</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
    }

    </span><span><span class="hljs-comment">// 检查Champs requis存在</span></span><span>
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$required</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span>) {
        </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>)) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
        }
    }

    </span><span><span class="hljs-comment">// Chèque de type</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>]) || !</span><span><span class="hljs-title function_ invoke__">is_string</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>]) || !</span><span><span class="hljs-title function_ invoke__">is_string</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'email'</span></span><span>])) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
    }

    </span><span><span class="hljs-comment">// Facultatif字段 meta,S&#39;il y a,Doit être un tableau</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'meta'</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>) &amp;&amp; !</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'meta'</span></span><span>])) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}

</span><span><span class="hljs-comment">// Exemple d&#39;utilisation</span></span><span>
</span><span><span class="hljs-variable">$ok</span></span><span> = [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>, </span><span><span class="hljs-string">'meta'</span></span><span> =&gt; [</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">25</span></span><span>]];
</span><span><span class="hljs-variable">$bad</span></span><span> = [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-string">'1'</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>];

</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">validateUser</span></span><span>(</span><span><span class="hljs-variable">$ok</span></span><span>));  </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">validateUser</span></span><span>(</span><span><span class="hljs-variable">$bad</span></span><span>)); </span><span><span class="hljs-comment">// false (id Non int)</span></span><span>
</span></span>

4. Vérifiez que chaque élément du tableau satisfait une certaine structure (liste de tableaux)

Scénario: le tableau reçu est une liste d'objets utilisateur (chaque élément du tableau doit se conformer aux règles ci-dessus de ValidateUser ).

Exemple de code:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateUserList</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$list</span></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$list</span></span><span>)) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;

    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$list</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> =&gt; </span><span><span class="hljs-variable">$item</span></span><span>) {
        </span><span><span class="hljs-comment">// Chaque élément doit être un tableau,Et la structure est efficace</span></span><span>
        </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>) || !</span><span><span class="hljs-title function_ invoke__">validateUser</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>)) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
        }
    }
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}
</span></span>

Remarque: Ici, pour chaque élément , est_array () d'abord, puis la fonction de vérification spécifique est appelée. Il est très important d'effectuer des chèques de défense sur les données étrangères (telles que les organes de demande d'API).


5. Réseaux imbriqués et vérification récursive

Les fonctions récursives sont couramment utilisées pour vérifier les structures lorsque les tableaux ont des profondeurs inconnues ou une nidification multicouche. Par exemple: menu de type arbre ou structure de classification à plusieurs niveaux.

Exemple récursif (chaque nœud doit contenir l'ID et les enfants (tableau ou vide)):

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateTreeNode</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$node</span></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$node</span></span><span>)) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;

    </span><span><span class="hljs-comment">// Doit inclure id</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'id'</span></span><span>, </span><span><span class="hljs-variable">$node</span></span><span>) || !</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$node</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>])) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
    }

    </span><span><span class="hljs-comment">// children Facultatif,但若存在Doit être un tableau,Chaque élément enfant doit également être un nœud légal</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-string">'children'</span></span><span>, </span><span><span class="hljs-variable">$node</span></span><span>)) {
        </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$node</span></span><span>[</span><span><span class="hljs-string">'children'</span></span><span>])) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;

        </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$node</span></span><span>[</span><span><span class="hljs-string">'children'</span></span><span>] </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$child</span></span><span>) {
            </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">validateTreeNode</span></span><span>(</span><span><span class="hljs-variable">$child</span></span><span>)) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
        }
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}
</span></span>

6. Utilisez des rappels / tableaux de règles pour généraliser la logique de validation

La "structure souhaitée" peut être abstraite en un tableau ordinaire, ce qui rend le validateur plus général et réutilisable.

Exemple de format de règle (pseudo-rules):

 <span><span><span class="hljs-variable">$schema</span></span><span> = [
    </span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-string">'int'</span></span><span>,
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'string'</span></span><span>,
    </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'string'</span></span><span>,
    </span><span><span class="hljs-string">'meta'</span></span><span> =&gt; [</span><span><span class="hljs-string">'type'</span></span><span> =&gt; </span><span><span class="hljs-string">'array'</span></span><span>, </span><span><span class="hljs-string">'schema'</span></span><span> =&gt; [</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-string">'int'</span></span><span>]]
];
</span></span>

Vérificateur général (implémentation simple):

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateBySchema</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$data</span></span></span><span>, </span><span><span class="hljs-variable">$schema</span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>) || !</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$schema</span></span><span>)) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;

    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$schema</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$rule</span></span><span>) {
        </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">array_key_exists</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>)) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>; </span><span><span class="hljs-comment">// 可扩展为Facultatif字段支持</span></span><span>
        }

        </span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>];

        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_string</span></span><span>(</span><span><span class="hljs-variable">$rule</span></span><span>)) {
            </span><span><span class="hljs-comment">// Correspondance simple</span></span><span>
            </span><span><span class="hljs-variable">$typeCheck</span></span><span> = </span><span><span class="hljs-keyword">match</span></span><span> (</span><span><span class="hljs-variable">$rule</span></span><span>) {
                </span><span><span class="hljs-string">'int'</span></span><span> =&gt; </span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>),
                </span><span><span class="hljs-string">'string'</span></span><span> =&gt; </span><span><span class="hljs-title function_ invoke__">is_string</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>),
                </span><span><span class="hljs-string">'bool'</span></span><span> =&gt; </span><span><span class="hljs-title function_ invoke__">is_bool</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>),
                </span><span><span class="hljs-string">'float'</span></span><span> =&gt; </span><span><span class="hljs-title function_ invoke__">is_float</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>),
                </span><span><span class="hljs-string">'array'</span></span><span> =&gt; </span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>),
                </span><span><span class="hljs-keyword">default</span></span><span> =&gt; </span><span><span class="hljs-literal">false</span></span><span>
            };
            </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$typeCheck</span></span><span>) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
        } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$rule</span></span><span>) &amp;&amp; </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$rule</span></span><span>[</span><span><span class="hljs-string">'type'</span></span><span>]) &amp;&amp; </span><span><span class="hljs-variable">$rule</span></span><span>[</span><span><span class="hljs-string">'type'</span></span><span>] === </span><span><span class="hljs-string">'array'</span></span><span>) {
            </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
            </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$rule</span></span><span>[</span><span><span class="hljs-string">'schema'</span></span><span>])) {
                </span><span><span class="hljs-comment">// Utilisez le même interne pour le tableau schema Effectuer une vérification(Supposons qu&#39;il s&#39;agit d&#39;un tableau associatif)</span></span><span>
                </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">validateBySchema</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$rule</span></span><span>[</span><span><span class="hljs-string">'schema'</span></span><span>])) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
            }
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>; </span><span><span class="hljs-comment">// Règles inconnues</span></span><span>
        }
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}
</span></span>

CONSEIL: Une bibliothèque de vérification mature (comme l'utilisation du propre validateur ou de la bibliothèque tierce du cadre) doit être utilisée au lieu de la mise en œuvre de l'auto-écriture dans des projets réels, mais la compréhension des principes peut aider à déboguer et à personnaliser.


7. Pièges communs et suggestions de programmation défensive

  1. Différencier entre ISSET et Array_Key_Exists : lorsque la clé de tableau existe mais la valeur est nul , ISSET renvoie false , et Array_key_Exists renvoie vrai . Si Null est la valeur autorisée, utilisez Array_Key_Exists .

  2. Les types de données d'entrée externe ne sont pas fiables : le décodage JSON ( JSON_DECODE ) convertira le numéro en int / float, mais le formulaire soumis à partir du formulaire est une chaîne, et la conversion de type ou la vérification stricte doit être utilisée.

  3. Ne vous contentez pas d'utiliser IS_Array pour terminer : Is_Array n'est que la première étape, et nécessite généralement de vérifier l'existence des clés, le type, la plage de valeur, etc.

  4. Remarque La différence entre les tableaux vides et les non-terrains : [] est un tableau, null / '' / 0 n'est pas un tableau. La question de l'autoriser un tableau vide doit être clairement définie logiquement.

  5. Considérations de performance : la vérification récursive de l'élément par éléments de grandes quantités de données peut avoir des frais généraux de performance et peut limiter les stratégies maximales de profondeur ou de vérification par lots si nécessaire.


8. Vérification Cas pratique: Traitement du corps de demande de l'API

Supposons que l'API reçoit le post / utilisateurs / lot , le corps est un tableau JSON et que chaque élément doit être un objet utilisateur (voir la section 3). Exemple de flux de traitement:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 1. Obtenez l&#39;original body</span></span><span>
</span><span><span class="hljs-variable">$raw</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'php://input'</span></span><span>);
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$raw</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>); </span><span><span class="hljs-comment">// Le deuxième paramètre true Renvoie le tableau associatif</span></span><span>

</span><span><span class="hljs-comment">// 2. Inspection de base</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">http_response_code</span></span><span>(</span><span><span class="hljs-number">400</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>([</span><span><span class="hljs-string">'error'</span></span><span> =&gt; </span><span><span class="hljs-string">'Le corps de la demande doit être JSON Tableau'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 3. Vérifiez chaque élément</span></span><span>
</span><span><span class="hljs-variable">$valid</span></span><span> = </span><span><span class="hljs-title function_ invoke__">validateUserList</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$valid</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">http_response_code</span></span><span>(</span><span><span class="hljs-number">422</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>([</span><span><span class="hljs-string">'error'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tableau中存在不符合结构的元素'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 4. Traitement de suivi(Écrivez la bibliothèque、Retour au succès, etc.)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">http_response_code</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>([</span><span><span class="hljs-string">'status'</span></span><span> =&gt; </span><span><span class="hljs-string">'ok'</span></span><span>]);
</span></span>

9. fonctions et outils d'assistance

  • filter_var () : Vérifiez le courrier électronique, l'URL, etc. (par exemple, filter_validate_email ).

  • ctype_digit () : détermine si une chaîne ne contient que des nombres (lorsqu'un numéro formé de chaîne est nécessaire).

  • La correspondance de PHP 8, les astuces de type et les types d'union peuvent fournir des garanties supplémentaires sur les signatures de fonction.

  • Utilisez des tests unitaires (PHPUnit) pour écrire des cas de test pour le validateur, couvrant divers scénarios de limite.


10. Résumé et suggestions

  • is_array () est important, mais ce n'est que la première étape de la vérification de la structure du tableau. Pour déterminer si la structure répond aux attentes, il est nécessaire de déterminer si l'existence de la clé, le type de valeur, les règles de champ facultatives, la vérification de la structure imbriquée et la vérification de la plage de valeur.

  • L'encapsulation de la logique de vérification en petites fonctions ou validateurs généraux basés sur le schéma peut améliorer la maintenabilité et la réutilisabilité.

  • Soyez toujours défensif à des entrées externes (empêcher la confusion, les champs manquants, les champs supplémentaires ou les données malveillantes).

  • Dans des scénarios complexes, l'utilisation des fonctions de vérification fournies par les bibliothèques de vérification ou les cadres matures est prioritaire, et l'exactitude des règles de vérification est assurée par le biais de tests unitaires.