filter_var_array

関数の概要

PHPの filter_var_array 関数は、配列の各要素に対して一括でフィルタリングやバリデーションを行える便利な関数です。大量の入力データを個別に検証する手間を省き、効率的に安全なデータ処理が可能になります。特にユーザーからのフォーム入力など、複数の値をまとめて検証したい場合に重宝します。

パラメータの説明

  • array $data:検証対象の配列。キーと値のペアで指定します。
  • array|int $args:各配列要素に適用するフィルターを指定します。単一のフィルターを全要素に適用する場合は整数値、個別に設定する場合は配列形式で指定可能です。
  • bool $add_empty(オプション):この値が true の場合、$args に存在しないキーが $data にあっても検証結果に空の値を追加します。デフォルトは true です。

戻り値

検証結果として、フィルターを通した配列を返します。もし特定の値がフィルターに失敗した場合は、その要素が FALSE に置き換わります。入力に問題があるかを簡単に確認できます。

使用例

基本的な使い方

<?php
$data = [
    'email' => 'example@example.com',
    'age' => '25',
    'website' => 'https://example.com'
];

$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);
var_dump($result);
?>

この例では、メールアドレス、年齢、ウェブサイトURLをそれぞれ適切なバリデーションで検証します。条件を満たせば元の値が返り、失敗すれば FALSE となります。

単一フィルターをすべての値に適用する例

<?php
$data = ['123', '456', '789'];
$filter = FILTER_VALIDATE_INT;

$result = filter_var_array($data, $filter);
var_dump($result);
?>

この場合、すべての配列要素に対して整数としての検証を行います。配列内の全値が数字かどうかまとめて判定したい時に便利です。

フィルターのオプションを使った細かい検証

<?php
$data = [
    'username' => 'User_01',
    'age' => '20',
    'email' => 'invalid-email'
];

$filters = [
    'username' => [
        'filter' => FILTER_CALLBACK,
        'options' => function($value) {
            return preg_match('/^[a-zA-Z0-9_]+$/', $value) ? $value : false;
        }
    ],
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 18]
    ],
    'email' => FILTER_VALIDATE_EMAIL
];

$result = filter_var_array($data, $filters);
var_dump($result);
?>

ここではユーザー名のフォーマットチェックをコールバック関数で実装し、年齢とメールの検証も合わせて行っています。不正なメールは FALSE になります。

関連する関数

  • filter_var:単一の値にフィルターを適用する
  • filter_input:グローバル変数から値を取得してフィルターをかける
  • filter_input_array$_GET$_POST などの入力配列を一括検証する

まとめ

filter_var_array はPHPで複数の配列データに対して一括で簡単にバリデーションやフィルタリングを行う強力な関数です。適切に使うことでコードの簡潔化と安全性の向上が図れます。フォームデータの検証やAPIからの受け取りデータ処理など、幅広い用途に役立つため、PHPプログラマはぜひ覚えておきたい関数です。