PHPでは、 filter_var_arrayは、配列内のデータをフィルタリングおよび検証するための非常に実用的な機能です。多くの開発者が質問に遭遇します: filter_var_arrayは多次元配列を処理できますか?この記事では、この質問に詳細に回答し、その使用と予防策を紹介します。
filter_var_array関数は、指定されたフィルターを配列の各要素に適用でき、$ _get、$ _post、$ _cookieアレイなどのユーザー入力データを処理するためによく使用できます。基本的な使用法は次のとおりです。
<?php
$data = [
'email' => '[email protected]',
'age' => '25',
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 65]
],
];
$result = filter_var_array($data, $filters);
var_dump($result);
?>
上記のコードは、メールボックスが有効であることを確認し、年齢が18〜65かどうかを確認します。
デフォルトでは、 filter_var_arrayは1次元配列のみを処理します。つまり、配列の最初のレイヤーを繰り返し、各キー値ペアにフィルタリングルールを適用します。多次元配列の場合、内側の層アレイを再帰的に処理しません。
例えば:
<?php
$data = [
'user' => [
'email' => '[email protected]',
'age' => '25',
],
'status' => 'active'
];
$filters = [
'user' => FILTER_DEFAULT, // これが正しいです"user"配列に対応します,デフォルトでは、内部要素はフィルタリングされていません
'status' => FILTER_SANITIZE_STRING,
];
$result = filter_var_array($data, $filters);
var_dump($result);
?>
結果として、ユーザーに対応する配列はそのまま返され、フィルタリングされません。
多次元配列をフィルタリングする必要がある場合、 filter_var_array自体は再帰操作を直接サポートすることはできません。一般的な慣行は、再帰関数を書き、多次元配列を繰り返し、各レイヤーのfilter_var_arrayを呼び出すか、 filter_varを使用することです。
サンプルコード:
<?php
function recursive_filter_var_array(array $data, array $filters) {
$result = [];
foreach ($filters as $key => $filter) {
if (is_array($filter) && isset($data[$key]) && is_array($data[$key])) {
// 再帰的に多次元配列を処理します
$result[$key] = recursive_filter_var_array($data[$key], $filter);
} elseif (isset($data[$key])) {
// 個々の要素をフィルタリングします
if (is_array($filter)) {
$result[$key] = filter_var($data[$key], $filter['filter'], $filter['options'] ?? []);
} else {
$result[$key] = filter_var($data[$key], $filter);
}
}
}
return $result;
}
// サンプルデータとフィルタリングルール
$data = [
'user' => [
'email' => '[email protected]',
'age' => '30',
],
'status' => 'active<script>',
];
$filters = [
'user' => [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 65],
],
],
'status' => FILTER_SANITIZE_STRING,
];
$result = recursive_filter_var_array($data, $filters);
var_dump($result);
?>
この再帰関数を通じて、多次元配列を柔軟に処理し、階層的にデータをフィルターすることができます。
フィルタリングルールと配列構造は<br>に対応する必要があります フィルタリングルール配列の構造は、フィルタリングされた配列の構造と一致する必要があります。そうしないと、フィルタリングの障害またはデータの損失を引き起こします。
filter_var_arrayは再帰をサポートしていません<br> デフォルトでは、1次元配列のみが処理され、多次元フィルタリングを実装するために再帰関数を自分で記述する必要があります。
合理的なフィルター選択<BR> メールボックスのfilter_validate_email 、integersのfilter_validate_int 、文字列のfilter_sanitize_stringなど、データ型に従って適切なフィルターを選択します。
オプション構成<br> フィルタリングの柔軟性とセキュリティを強化するために、範囲制限、デフォルト値などのフィルターにオプションを設定できます。
filter_var_arrayは、PHPの強力な配列フィルタリングツールですが、1次元アレイのみをサポートします。多次元配列に対処したい場合は、再帰フィルタリング機能を自分で実装することをお勧めします。フィルタリングルールと構造を合理的に設計することにより、データセキュリティと有効性を効果的に保証できます。
詳細については、PHP関連のヒントと例については、 https://gitbox.net/php/filter_var_arrayにアクセスしてください。