当前位置: 首页> 最新文章列表> filter_var_array 基础用法详解

filter_var_array 基础用法详解

gitbox 2025-05-31

在 PHP 中,数据过滤和验证是处理用户输入时不可或缺的一部分。我们经常会用 filter_var() 来验证单个数据值,但如果我们有一组数据,比如表单提交的多项字段,每个字段都需要不同的验证规则,这时使用 filter_var_array() 就非常合适。

什么是 filter_var_array?

filter_var_array() 是 PHP 提供的一个函数,用于过滤多个数据值,通常是一个关联数组,比如来自 $_GET$_POST 的数据。这个函数可以根据你定义的过滤器规则,对每个字段分别进行处理。

函数原型如下:

filter_var_array(array $data, array|int $definition, bool $add_empty = true): array|false|null
  • $data:要处理的数组数据。

  • $definition:过滤规则,可以是一个整型(为所有字段使用同一个过滤器),也可以是一个数组(为不同字段定义不同过滤器)。

  • $add_empty:是否在结果中包含没有匹配到的键,默认为 true

基础用法

假设你有一个用户登录表单,包含邮箱和年龄字段。你希望对邮箱进行验证,对年龄进行整数验证并限制范围。使用 filter_var_array() 处理如下:

$data = [
    'email' => '[email protected]',
    'age' => '25'
];

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => [
            'min_range' => 18,
            'max_range' => 99
        ]
    ]
];

$result = filter_var_array($data, $filters);

print_r($result);

输出可能是:

Array
(
    [email] => [email protected]
    [age] => 25
)

如果验证失败,相应的值会变成 false

实际应用场景

1. 表单验证

filter_var_array() 特别适合处理表单数据,因为你可以定义清晰的验证规则并批量处理。

$_POST = [
    'username' => 'jack',
    'email' => '[email protected]',
    'age' => '17'
];

$rules = [
    'username' => [
        'filter' => FILTER_SANITIZE_STRING,
        'flags' => FILTER_FLAG_NO_ENCODE_QUOTES
    ],
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 18]
    ]
];

$cleanData = filter_var_array($_POST, $rules);

print_r($cleanData);

在这个例子中,如果年龄小于 18,返回的 age 就会是 false,提示我们验证失败。

2. 结合默认值使用

你可以通过 FILTER_DEFAULT 和自定义选项来设置默认值,在缺少字段时也能得到有意义的输出。

$data = [
    'email' => 'wrong-format',
    // 'age' => missing
];

$rules = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['default' => 18]
    ]
];

$result = filter_var_array($data, $rules);

print_r($result);

输出:

Array
(
    [email] => false
    [age] => 18
)

3. 和 API 请求结合使用

当你接收第三方 API 提交的数据时,使用 filter_var_array() 可以快速确保数据安全。

$json = file_get_contents('https://api.gitbox.net/user/input');
$input = json_decode($json, true);

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'subscription' => FILTER_VALIDATE_BOOLEAN
];

$validated = filter_var_array($input, $filters);

注意事项

  • 如果传入的 $data 不是数组,filter_var_array() 会返回 false

  • 如果某些键不在 $definition 中,但 $add_empty 设置为 true,它们仍会出现在返回结果中,值为 null

  • 需要小心使用 FILTER_SANITIZE_* 类型的过滤器,它们是清洗数据而不是验证数据。

小结

filter_var_array() 是一个非常强大的工具,能够帮助我们对一组数据进行批量验证与清洗,代码更加简洁,也更具可维护性。在处理表单数据、API 请求或者任何需要多字段验证的场景中,它都能大放异彩。

学会合理使用 filter_var_array(),你将能大幅提高 PHP 项目中数据处理的安全性与效率。