【PHP8.x】filter_var_array関数の使い方
filter_var_array関数は、配列に含まれる複数の値を、指定したルールに基づいて一度にフィルタリングまたはサニタイズ(無害化)する処理を実行する関数です。主に、ウェブフォームから送信された$_GET
や$_POST
のような複数の入力データをまとめて検証・整形する際に使用されます。この関数は、第1引数にフィルタを適用したいデータを持つ配列を、第2引数に各データに対するフィルタの定義を記述した配列を渡します。第2引数の定義配列では、キーごとに入力値が整数であるか検証するFILTER_VALIDATE_INT
や、不正な文字を取り除くFILTER_SANITIZE_STRING
といったフィルタの種類を指定できます。さらに、フィルタにオプションを追加して、例えば数値の範囲を制限することも可能です。処理後、関数はフィルタリングされた結果を新しい配列として返します。検証に失敗した要素はfalse
に、入力データに存在しなかったキーに対応する要素はnull
になります。単一の値を処理するfilter_var
関数と異なり、複数の値を効率的に一括処理できる点が特徴です。
基本的な使い方
構文(syntax)
filter_var_array(
array $配列,
array|int $フィルタ定義,
bool $キーが存在しない場合にNULLを追加するか = true
): array|false|null
引数(parameters)
array $array, array|int $options = 516, bool $add_empty = true
- array $array: フィルタリングする値の配列
- array|int $options = 516: 適用するフィルタのオプションを指定する配列またはフラグ。デフォルトは
FILTER_DEFAULT
(FILTER_UNSAFE_RAW)。 - bool $add_empty = true: 空の値をフィルタリング結果に含めるかどうかを指定するブール値。
true
の場合、空の値も結果に含まれます。
戻り値(return)
array|false|null
filter_var_array関数は、指定された変数配列に対してフィルタリング処理を実行し、その結果を配列またはfalseで返します。フィルタリングに失敗した場合、または入力にnullが含まれていた場合はnullが返されます。
サンプルコード
PHP: filter_var_arrayで複数配列を検証・無害化する
<?php
/**
* filter_var_array() を使用して、複数の入力値を一度に検証・無害化するサンプルです。
* Webフォームから受け取ったデータなど、配列形式のデータをまとめて処理する場合に便利です。
*/
function processUserData(): void
{
// 1. フィルタリング対象となる入力データの配列を定義します。
// 通常、これは $_POST や $_GET などのスーパーグローバル変数になります。
$userInput = [
'name' => '<b>Taro Yamada</b>', // サニタイズ(無害化)が必要なHTMLタグを含む名前
'age' => '25', // 検証が必要な年齢(文字列型)
'email' => 'invalid-email', // 不正な形式のメールアドレス
'website' => 'https://example.com', // 正しい形式のURL
// 'country' キーは入力データに存在しない
];
// 2. 各入力キーに対して適用するフィルタのルールを配列で定義します。
$filterRules = [
// 'name' はHTMLタグを除去して無害化します (FILTER_SANITIZE_STRING は非推奨のため代替を使用)
'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
// 'age' は整数であるか検証し、さらにオプションで有効な範囲を指定します。
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => [
'min_range' => 1, // 最小値は1
'max_range' => 120 // 最大値は120
]
],
// 'email' はメールアドレスとして有効な形式か検証します。
'email' => FILTER_VALIDATE_EMAIL,
// 'website' はURLとして有効な形式か検証します。
'website' => FILTER_VALIDATE_URL,
// 'country' は入力データに存在しませんが、フィルタは定義されています。
'country' => FILTER_SANITIZE_SPECIAL_CHARS,
];
// 3. filter_var_array() を実行して、配列全体をフィルタリングします。
// 第3引数 $add_empty (デフォルトはtrue) により、
// 元の配列に存在しないキー ('country') の結果も null として含まれます。
$processedData = filter_var_array($userInput, $filterRules);
// 4. フィルタリング後の結果を出力します。
// - 検証に成功した値は、型が変換されたり('age')、そのままの値('website')になります。
// - サニタイズされた値は、無害化された文字列('name')になります。
// - 検証に失敗した値('email')は false になります。
// - 元のデータに存在しなかったキー('country')は null になります。
var_dump($processedData);
}
// 関数を実行
processUserData();
/*
--- 期待される出力 ---
array(5) {
["name"]=>
string(31) "<b>Taro Yamada</b>"
["age"]=>
int(25)
["email"]=>
bool(false)
["website"]=>
string(18) "https://example.com"
["country"]=>
NULL
}
*/
PHPのfilter_var_array
関数は、複数の入力値を一度に検証(バリデーション)したり、無害化(サニタイズ)したりするための便利な機能です。Webフォームから受け取ったデータなど、配列形式のデータをまとめて安全に処理したい場合に利用します。
この関数は、最初の引数$array
でフィルタリングしたい入力データ(例:$_POST
や$_GET
)の配列を受け取ります。次に、二番目の引数$options
として、各入力キーにどのようなフィルターを適用するかを定義したルール配列を指定します。たとえば、メールアドレスの検証や、HTMLタグの除去などが設定可能です。オプションの三番目の引数$add_empty
がtrue
の場合、元の入力配列に存在しないキーに対しても結果がnull
として含まれます。
サンプルコードでは、$userInput
という仮想の入力データに対して、$filterRules
で定義されたルールを適用しています。name
はHTMLタグが除去され、age
は整数として検証・変換されます。不正な形式のemail
は検証に失敗してfalse
となり、正しいwebsite
はそのままの値が返されます。また、入力データに存在しないcountry
キーはnull
として結果に含まれています。
filter_var_array
は、フィルタリング後の結果を連想配列として返します。検証に成功した値は、適切な型に変換されたり、そのままの値で返されます。検証に失敗した値はfalse
となり、無害化された値は処理済みの文字列となります。この関数により、開発者は入力データを安全かつ効率的に処理できるようになります。
filter_var_array
はウェブフォームなどのユーザー入力データをまとめて検証・無害化する際に非常に有効な関数です。注意点として、フィルタリング結果は入力キーごとに成功時は適切な値や型変換後の値、検証失敗時はfalse
、入力データに存在しないキーはnull
となるため、戻り値の各要素を必ず厳密に確認する処理が必要です。
特にFILTER_SANITIZE_STRING
は非推奨であるため、サンプルコードのようにFILTER_SANITIZE_FULL_SPECIAL_CHARS
などの代替フィルタを利用してください。また、フィルタ定義に存在しない入力キーの処理は、第3引数$add_empty
(デフォルトtrue
)によってnull
として結果に含まれることを理解しておきましょう。フィルタのオプションは配列で細かく指定できるため、条件に応じた柔軟な検証が可能です。