Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich IS_Array verwenden, um festzustellen, ob die Struktur von Array -Elementen die Erwartungen entspricht? Detaillierte Analyse

Wie kann ich IS_Array verwenden, um festzustellen, ob die Struktur von Array -Elementen die Erwartungen entspricht? Detaillierte Analyse

gitbox 2025-09-12

In PHP ist is_array () die direkteste integrierte Funktion, um festzustellen, ob eine Variable ein Array ist. "Ob die Struktur des Array -Elements den Erwartungen erfüllt", geht es jedoch normalerweise nicht nur darum, zu beurteilen, dass die Variable ein Array ist, sondern auch die Überprüfung der Schlüssel des Arrays erfordert, ob die erforderlichen Felder vorhanden sind, ob die verschachtelte Struktur korrekt ist. Best Practices.


1. Überprüfung der grundlegenden Konzepte

  • IS_Array ($ V) : Bestimmt, ob $ v ein Array ist (Rückgabe true oder falsch ).

  • isset ($ arr ['key']) und array_key_exists ('key', $ arr) : Bestimmen Sie, ob der Schlüssel existiert; Die ISSET wird auch feststellen, dass der Wert nicht null ist.

  • Geben Sie Überprüfungsfunktionen ein: is_int () , is_string () , is_bool () , is_float () usw.

  • Kombinationsprüfung: IS_Array () wird normalerweise in Kombination mit der wichtigsten Existenz und der Typ -Überprüfung verwendet, um festzustellen, ob ein Element "der erwarteten Struktur entspricht".


2. Die einfachste Prüfung: Bestimmen Sie, ob die Variable ein Array ist

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

Hinweis: Dies ist der grundlegendste Schritt. Unter der Prämisse sollte eine komplexere strukturelle Überprüfung durchgeführt werden, die is_array () wahr ist.


3.. Überprüfen Sie, ob das assoziative Array die erwarteten Felder (Schlüssel) und Typen enthält

Szenario: Ich hoffe, eine Reihe von Benutzerinformationen zu erhalten. Die Struktur lautet wie folgt:

 <span><span>[
  'id' =&gt; int,
  'name' =&gt; string,
  'email' =&gt; string,
  'meta' =&gt; array (Optional,Wenn es existiert, sollte es ein Array sein)
]
</span></span>

Implementierungsbeispiel:

 <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">// Erforderliche Felder</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">// Erstens ist es ein 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">$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">// 检查Erforderliche Felder存在</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">// Geben Sie Scheck ein</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">// Optional字段 meta,Wenn es gibt,Muss ein Array sein</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">// Beispiel für die Nutzung</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 NEIN int)</span></span><span>
</span></span>

4. Überprüfen Sie, ob jedes Element im Array eine bestimmte Struktur erfüllt (Array -Liste).

Szenario: Das empfangene Array ist eine Liste von Benutzerobjekten (jedes Element des Arrays sollte den oben genannten Regeln des ValidesUsers entsprechen).

Beispielcode:

 <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">// Jedes Element muss ein Array sein,Und die Struktur ist effektiv</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>

Hinweis: Hier wird für jedes Element zuerst is_array () und dann die spezifische Überprüfungsfunktion aufgerufen. Es ist sehr wichtig, Verteidigungsprüfungen für ausländische Daten (z. B. API -Anforderungsstellen) durchzuführen.


5. verschachtelte Arrays und rekursive Überprüfung

Rekursive Funktionen werden üblicherweise verwendet, um Strukturen zu verifizieren, wenn Arrays unbekannte Tiefen oder mehrschichtige Verschachteln aufweisen. Zum Beispiel: baumartiges Menü oder Klassifizierungsstruktur mit mehreren Ebenen.

Rekursives Beispiel (jeder Knoten sollte ID und Kinder (Array oder leer) enthalten):

 <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">// Muss einschließen 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 Optional,但若存在Muss ein Array sein,Jedes Kinderelement muss auch ein legaler Knoten sein</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. Verwenden Sie Rückrufe/Regelarrays, um die Validierungslogik zu verallgemeinern

Die "gewünschte Struktur" kann in ein reguläres Array abstrahiert werden, wodurch der Validator allgemeiner und wiederverwendbarer wird.

Beispiel für ein Regelformat (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>

Allgemeiner Verifizierer (einfache Implementierung):

 <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">// 可扩展为Optional字段支持</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">// Einfacher Typ Matching</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">// Verwenden Sie dasselbe interne für das Array schema Überprüfung durchführen(Angenommen, es ist ein assoziatives Array)</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">// Unbekannte Regeln</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>

TIPP: Eine ausgereifte Verifizierungsbibliothek (z. B. die Verwendung der eigenen Validator- oder Drittanbieterbibliothek des Frameworks) sollte anstelle einer Selbstschreibimplementierung in realen Projekten verwendet werden. Das Verständnis der Prinzipien kann jedoch zum Debuggen und Anpassen helfen.


7. Häufige Fallen und defensive Programmiervorschläge

  1. Unterscheiden Sie zwischen Isset und Array_Key_Exists : Wenn die Array -Taste vorhanden ist, der Wert jedoch null ist, gibt Isset false zurück, und Array_key_exists gibt true zurück. Wenn Null der zulässige Wert ist, verwenden Sie Array_key_exists .

  2. Die Datentypen der externen Eingabe sind unzuverlässig : JSON -Decoding ( JSON_Decode ) wandelt die Nummer in INT/Float um, aber das aus dem Formular eingereichte Form ist eine Zeichenfolge, und die Konvertierung oder strenge Überprüfung sollte verwendet werden.

  3. Verwenden Sie nicht nur IS_Array , um fertig zu werden : IS_Array ist nur der erste Schritt und erfordert normalerweise die Überprüfung der Taste -Existenz, des Typs, des Wertebereichs usw.

  4. Beachten Sie die Differenz zwischen leeren Arrays und Nicht-Arrays : [] ist ein Array, null / '' / 0 ist kein Array. Ob ein leeres Array zuzulassen, muss logisch klar definiert werden.

  5. Leistungsüberlegungen : Die rekursive Überprüfung großer Daten von Gegenständen für Elemente kann eine Leistungsaufwand aufweisen und bei Bedarf die Strategien zur maximalen Tiefe oder Stapelüberprüfung begrenzen können.


8. Praktischer Fall überprüfen: Verarbeitung von API -Anfrage Körper

Angenommen, die API empfängt Post /Benutzer /Stapel , Körper ist ein JSON -Array, und jedes Element sollte ein Benutzerobjekt sein (siehe Abschnitt 3). Probenverarbeitungsfluss:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 1. Holen Sie sich das 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">// Der zweite Parameter true Gibt das assoziative Array zurück</span></span><span>

</span><span><span class="hljs-comment">// 2. Grundinspektion</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">'Die Anfrage des Antrags muss sein JSON Array'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 3. Überprüfen Sie jedes Element</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">'Array中存在不符合结构的元素'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 4. Follow-up-Verarbeitung(Bibliothek schreiben、Zurück zum Erfolg zurückkehren usw.)</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. Helferfunktionen und Werkzeuge

  • filter_var () : Überprüfen Sie die E -Mail, URL usw. (z. B. filter_validate_email ).

  • CTYPE_DIGIT () : Bestimmt, ob eine Zeichenfolge nur Zahlen enthält (wenn eine string-geformte Nummer benötigt wird).

  • PHP 8 -Übereinstimmung , Typ -Hinweise und Gewerkschaftstypen können zusätzliche Garantien für Funktionssignaturen liefern.

  • Verwenden Sie Unit -Tests (Phpunit), um Testfälle für den Validator zu schreiben und verschiedene Grenzszenarien abzudecken.


10. Zusammenfassung und Vorschläge

  • is_array () ist wichtig, aber es ist nur der erste Schritt in der Array -Strukturüberprüfung. Um festzustellen, ob die Struktur den Erwartungen entspricht, muss festgestellt werden, ob die Existenz des Schlüssels, der Typ des Werts, der optionalen Feldregeln, der verschachtelten Strukturüberprüfung und der Wertsprüfung der Wertschöpfung.

  • Die Einkapselung der Verifizierungslogik in kleine Funktionen oder schema-basierte allgemeine Validatoren kann die Wartbarkeit und Wiederverwendbarkeit verbessern.

  • Seien Sie immer defensiv auf externe Eingaben (verhindern Sie Verwirrung, fehlende Felder, zusätzliche Felder oder böswillige Daten).

  • In komplexen Szenarien wird die Verwendung von Überprüfungsfunktionen, die durch reife Verifizierungsbibliotheken oder Frameworks bereitgestellt werden, Priorität, und die Richtigkeit der Überprüfungsregeln wird durch Unit -Tests gewährleistet.