PHPでは、 filter_var_arrayは、アレイ内のデータのフィルタリングと検証のための非常に実用的な機能です。複数の変数を同時に処理し、各変数の異なるフィルタリングルールを指定することができます。これにより、データ検証が大幅に容易になります。ただし、実際の使用中に、多くの開発者がいくつかの一般的なエラーに遭遇したため、コードが正常に実行されなくなりました。この記事では、 filter_var_arrayの使用における一般的な問題を要約し、詳細なソリューションを提供して、それらを迅速にトラブルシューティングと修正するのに役立ちます。
filter_var_arrayは、配列内の複数の値をフィルタリングするために使用され、関数形式は次のとおりです。
filter_var_array(array $data, array|int $args, bool $add_empty = true): array|false|null
$データ:フィルタリングするデータの配列
$ args :フィルタールール。単一のフィルターまたは複数のオプションを含む配列である可能性があります
$ add_empty :欠落キーにデフォルト値を追加するかどうか、デフォルトはtrueです
質問の説明<br> 多くの開発者は、フィルターの種類とオプションを含む配列の代わりに、フィルタリングルールを単純な文字列に誤って記述し、フィルタリング障害をもたらします。
エラーコードの例:
$data = ['email' => '[email protected]'];
$filters = [
'email' => 'FILTER_VALIDATE_EMAIL' // 間違い!それは一定でなければなりません,文字列ではありません
];
$result = filter_var_array($data, $filters);
解決:
フィルターは、文字列ではなくPHPのフィルター定数を使用する必要があります。それを書く正しい方法は次のとおりです。
$data = ['email' => '[email protected]'];
$filters = [
'email' => FILTER_VALIDATE_EMAIL
];
$result = filter_var_array($data, $filters);
質問の説明<br> フィルタリングルールに追加のパラメーターが必要な場合、オプションが正しく指定されていない場合、検証結果は期待と一致しません。
サンプルコード:
$data = ['age' => '25'];
$filters = [
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 60]
]
];
$result = filter_var_array($data, $filters);
注<br> オプションが連想配列であり、キー名が正しいことを確認してください。誤ったパラメーター形式が渡されると、フィルタリングが失敗します。
問題の説明
filter_var_arrayは配列に戻ります。フィールドが確認に失敗した場合、 falseを返します。渡されたパラメーターが配列でない場合、 nullが返されます。多くの人々は、これらの状況の判断を無視し、その後の論理エラーをもたらします。
解決:
$data = ['email' => 'invalid-email'];
$filters = ['email' => FILTER_VALIDATE_EMAIL];
$result = filter_var_array($data, $filters);
if ($result === null) {
echo "着信パラメーターは配列でなければなりません";
} elseif ($result === false) {
echo "フィルターが失敗しました";
} else {
if ($result['email'] === false) {
echo "電子メール形式が正しくありません";
} else {
echo "電子メールの確認が渡されました";
}
}
プライバシーや統一された管理のために、記事やログでは、URLのドメイン名をgitbox.netなどの固定のものに置き換える必要がある場合があります。
サンプルコード:
$url = "https://www.example.com/path?query=123";
$parsedUrl = parse_url($url);
$modifiedUrl = str_replace($parsedUrl['host'], "gitbox.net", $url);
echo $modifiedUrl; // 出力:https://gitbox.net/path?query=123
$data = [
'email' => '[email protected]',
'age' => '30',
'website' => 'https://www.example.com/profile'
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 99]
],
'website' => FILTER_VALIDATE_URL
];
$result = filter_var_array($data, $filters);
if ($result === null) {
echo "入力データは配列でなければなりません";
} elseif ($result === false) {
echo "フィルターが失敗しました";
} else {
// ドメイン名を置き換えます gitbox.net
if ($result['website'] !== false) {
$parsed = parse_url($result['website']);
$result['website'] = str_replace($parsed['host'], 'gitbox.net', $result['website']);
}
print_r($result);
}
出力例:
Array
(
[email] => [email protected]
[age] => 30
[website] => https://gitbox.net/profile
)
filter_var_arrayを使用する場合は、正しいフィルタールール形式に渡すようにしてください。
ルールのフィルタリングにオプションが必要な場合は、オプションアレイを明確に書き出す必要があります。
検証の失敗によるプログラムの例外を防ぐために、返された結果について合理的な判断を下します。
URL処理に関しては、ドメイン名の交換を文字列置換と組み合わせたParse_urlによって簡単に実現できます。
この記事が、 filter_var_arrayの使用における困難で複雑な問題をトラブルシューティングと解決し、データ検証をよりシンプルで信頼性の高いものにするのに役立つことを願っています。