【PHP8.x】filter_var_array関数の使い方

filter_var_array関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

filter_var_array関数は、配列に含まれる複数の値を、指定したルールに基づいて一度にフィルタリングまたはサニタイズ(無害化)する処理を実行する関数です。主に、ウェブフォームから送信された$_GET$_POSTのような複数の入力データをまとめて検証・整形する際に使用されます。この関数は、第1引数にフィルタを適用したいデータを持つ配列を、第2引数に各データに対するフィルタの定義を記述した配列を渡します。第2引数の定義配列では、キーごとに入力値が整数であるか検証するFILTER_VALIDATE_INTや、不正な文字を取り除くFILTER_SANITIZE_STRINGといったフィルタの種類を指定できます。さらに、フィルタにオプションを追加して、例えば数値の範囲を制限することも可能です。処理後、関数はフィルタリングされた結果を新しい配列として返します。検証に失敗した要素はfalseに、入力データに存在しなかったキーに対応する要素はnullになります。単一の値を処理するfilter_var関数と異なり、複数の値を効率的に一括処理できる点が特徴です。

構文(syntax)

1filter_var_array(
2    array $配列,
3    array|int $フィルタ定義,
4    bool $キーが存在しない場合にNULLを追加するか = true
5): 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で複数配列を検証・無害化する

1<?php
2
3/**
4 * filter_var_array() を使用して、複数の入力値を一度に検証・無害化するサンプルです。
5 * Webフォームから受け取ったデータなど、配列形式のデータをまとめて処理する場合に便利です。
6 */
7function processUserData(): void
8{
9    // 1. フィルタリング対象となる入力データの配列を定義します。
10    // 通常、これは $_POST や $_GET などのスーパーグローバル変数になります。
11    $userInput = [
12        'name'    => '<b>Taro Yamada</b>', // サニタイズ(無害化)が必要なHTMLタグを含む名前
13        'age'     => '25',                // 検証が必要な年齢(文字列型)
14        'email'   => 'invalid-email',     // 不正な形式のメールアドレス
15        'website' => 'https://example.com', // 正しい形式のURL
16        // 'country' キーは入力データに存在しない
17    ];
18
19    // 2. 各入力キーに対して適用するフィルタのルールを配列で定義します。
20    $filterRules = [
21        // 'name' はHTMLタグを除去して無害化します (FILTER_SANITIZE_STRING は非推奨のため代替を使用)
22        'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
23        
24        // 'age' は整数であるか検証し、さらにオプションで有効な範囲を指定します。
25        'age' => [
26            'filter'  => FILTER_VALIDATE_INT,
27            'options' => [
28                'min_range' => 1,  // 最小値は1
29                'max_range' => 120 // 最大値は120
30            ]
31        ],
32        
33        // 'email' はメールアドレスとして有効な形式か検証します。
34        'email' => FILTER_VALIDATE_EMAIL,
35        
36        // 'website' はURLとして有効な形式か検証します。
37        'website' => FILTER_VALIDATE_URL,
38
39        // 'country' は入力データに存在しませんが、フィルタは定義されています。
40        'country' => FILTER_SANITIZE_SPECIAL_CHARS,
41    ];
42
43    // 3. filter_var_array() を実行して、配列全体をフィルタリングします。
44    // 第3引数 $add_empty (デフォルトはtrue) により、
45    // 元の配列に存在しないキー ('country') の結果も null として含まれます。
46    $processedData = filter_var_array($userInput, $filterRules);
47
48    // 4. フィルタリング後の結果を出力します。
49    // - 検証に成功した値は、型が変換されたり('age')、そのままの値('website')になります。
50    // - サニタイズされた値は、無害化された文字列('name')になります。
51    // - 検証に失敗した値('email')は false になります。
52    // - 元のデータに存在しなかったキー('country')は null になります。
53    var_dump($processedData);
54}
55
56// 関数を実行
57processUserData();
58
59/*
60--- 期待される出力 ---
61array(5) {
62  ["name"]=>
63  string(31) "&lt;b&gt;Taro Yamada&lt;/b&gt;"
64  ["age"]=>
65  int(25)
66  ["email"]=>
67  bool(false)
68  ["website"]=>
69  string(18) "https://example.com"
70  ["country"]=>
71  NULL
72}
73*/

PHPのfilter_var_array関数は、複数の入力値を一度に検証(バリデーション)したり、無害化(サニタイズ)したりするための便利な機能です。Webフォームから受け取ったデータなど、配列形式のデータをまとめて安全に処理したい場合に利用します。

この関数は、最初の引数$arrayでフィルタリングしたい入力データ(例:$_POST$_GET)の配列を受け取ります。次に、二番目の引数$optionsとして、各入力キーにどのようなフィルターを適用するかを定義したルール配列を指定します。たとえば、メールアドレスの検証や、HTMLタグの除去などが設定可能です。オプションの三番目の引数$add_emptytrueの場合、元の入力配列に存在しないキーに対しても結果が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として結果に含まれることを理解しておきましょう。フィルタのオプションは配列で細かく指定できるため、条件に応じた柔軟な検証が可能です。

関連コンテンツ