現在の位置: ホーム> 最新記事一覧> is_arrayを使用して、配列要素の構造が期待を満たしているかどうかを判断する方法は?詳細な分析

is_arrayを使用して、配列要素の構造が期待を満たしているかどうかを判断する方法は?詳細な分析

gitbox 2025-09-12

PHPでは、 IS_ARRAY()は、変数が配列であるかどうかを判断するための最も直接的な組み込み関数です。ただし、「配列要素の構造が期待を満たすかどうか」は通常、変数が配列であると判断するだけでなく、アレイのキー、値のタイプ、必要なフィールドが存在するかどうか、ネストされた構造が存在するかどうか、基本的なものから高度なものまで、コードの例を使用してラインでラインでラインで、この記事を使用する方法を説明する方法を説明します。そしてベストプラクティス。


1。基本概念のレビュー

  • is_array($ v)$ vが配列であるかどうかを決定します( trueまたはfalseを返します)。

  • Isset($ arr ['key'])およびarray_key_exists( 'key'、$ arr) :キーが存在するかどうかを判断します。 ISSETはまた、値がnullではないと判断します。

  • タイプチェック関数: is_int()is_string()is_bool()is_float()など。

  • 組み合わせチェック: is_array()は通常、重要な存在とタイプチェックと組み合わせて使用​​され、要素が「予想される構造に準拠している」かどうかを判断します。


2。最も単純なチェック:変数が配列であるかどうかを判断します

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

注:これは最も基本的なステップです。 is_array()真であるという前提の下で、これ以上複雑な構造検証を実行する必要があります。


3.連想配列に予想されるフィールド(キー)とタイプが含まれていることを確認します

シナリオ:ユーザー情報の配列を受け取りたいと考えています。構造は次のとおりです。

 <span><span>[
  'id' =&gt; int,
  'name' =&gt; string,
  'email' =&gt; string,
  'meta' =&gt; array (オプション,存在する場合は、配列である必要があります)
]
</span></span>

実装例:

 <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">// 必要なフィールド</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">// まず、それは配列です</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">// 检查必要なフィールド存在</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">// タイプチェック</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">// オプション字段 meta,ある場合,配列でなければなりません</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">// 使用の例</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 いいえ int)</span></span><span>
</span></span>

4.配列内の各要素が特定の構造を満たしていることを確認します(配列リスト)

シナリオ:受信した配列はユーザ​​ーオブジェクトのリストです(配列の各要素は、上記のValidateUserのルールに準拠する必要があります)。

サンプルコード:

 <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">// 各要素は配列でなければなりません,そして、構造は効果的です</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>

注:ここでは、各アイテムについて、最初にis_array() 、次に特定の検証関数が呼び出されます。外国のデータ(APIリクエストボディなど)で防御チェックを実行することが非常に重要です。


5。ネストされたアレイと再帰検証

再帰関数は、アレイに未知の深さまたは多層ネスティングがある場合に構造を検証するために一般的に使用されます。例:ツリーのようなメニューまたはマルチレベルの分類構造。

再帰的な例(各ノードにはID子供(配列または空)が含まれている必要があります):

 <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">// 含める必要があります 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 オプション,但若存在配列でなければなりません,各子要素も法的ノードでなければなりません</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.コールバック/ルール配列を使用して、検証ロジックを一般化します

「望ましい構造」を通常の配列に抽象化することができ、バリデーターをより一般的で再利用可能にします。

ルール形式の例(擬似ルール):

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

一般検証者(単純な実装):

 <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">// 可扩展为オプション字段支持</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">// シンプルなタイプマッチング</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">// アレイに同じ内部を使用します schema 検証を実行します(それが連想配列であると仮定します)</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">// 不明なルール</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>

ヒント:成熟した検証ライブラリ(フレームワーク独自のバリデーターまたはサードパーティライブラリを使用するなど)は、実際のプロジェクトで実装を自己執筆する代わりに使用する必要がありますが、原則を理解することはデバッグとカスタマイズに役立ちます。


7.一般的なトラップと防御プログラミングの提案

  1. ISSETarray_key_existsを区別する:Arrayキーが存在するが、値がnullである場合、 ISSETはfalseを返し、 Array_key_existstrueを返します。 nullが許容値の場合は、 array_key_existsを使用してください。

  2. 外部入力のデータ型は信頼できません。JSONデコード( json_decode )は数をint/floatに変換しますが、フォームから送信されたものは文字列であり、タイプ変換または厳密なチェックを使用する必要があります。

  3. IS_ARRAYを使用して終了するだけではありません。IS_ARRAY最初のステップにすぎず、通常は重要な存在、タイプ、値の範囲などを確認する必要があります。

  4. 空の配列と非アレイの違いに注意してください[]は配列であり、 null / '' / 0は配列ではありません。空の配列を許可するかどうかは、論理的に明確に定義する必要があります。

  5. パフォーマンスの考慮事項:大量のデータのアイテムごとの再帰検証では、パフォーマンスがオーバーヘッドになり、必要に応じて最大の深さまたはバッチ検証戦略を制限する可能性があります。


8。検証の実用的なケース:API要求本体の処理

APIがPOST /ユーザー /バッチを受信し、ボディがJSONアレイであり、各要素がユーザーオブジェクトである必要があると仮定します(セクション3を参照)。サンプル処理フロー:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 1. オリジナルを取得します 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">// 2番目のパラメーター true 連想配列を返します</span></span><span>

</span><span><span class="hljs-comment">// 2. 基本的な検査</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">'リクエスト本体はそうでなければなりません JSON 配列'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 3. 各アイテムを確認します</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">'配列中存在不符合结构的元素'</span></span><span>]);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 4. フォローアップ処理(ライブラリを書く、成功に戻るなど。)</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。ヘルパー機能とツール

  • filter_var() :電子メール、urlなどを確認します(たとえば、 filter_validate_email )。

  • ctype_digit() :文字列に数値のみが含まれているかどうかを決定します(文字列形式の数字が必要な場合)。

  • PHP 8の一致、タイプのヒント、およびユニオンタイプは、関数の署名に関する追加の保証を提供できます。

  • ユニットテスト(PHPUNIT)を使用して、さまざまな境界シナリオをカバーする検証因子のテストケースを記述します。


10。概要と提案

  • is_array()は重要ですが、それは配列構造の検証の最初のステップにすぎません。構造が期待を満たすかどうかを判断するには、キーの存在、値のタイプ、オプションのフィールドルール、ネストされた構造の検証、および値範囲の検証を判断する必要があります。

  • 検証ロジックを小さな関数またはスキーマベースの一般的なバリッターにカプセル化すると、保守性と再利用性が向上する可能性があります。

  • 常に外部入力に対して防御的である(混乱、フィールドの欠落、追加のフィールド、または悪意のあるデータを防ぎます)。

  • 複雑なシナリオでは、成熟した検証ライブラリまたはフレームワークによって提供される検証関数の使用が優先され、検証ルールの正確性が単体テストを通じて保証されます。