php8.5
Home/ Manual/ filter / functions/ filter_var_array

filter_var_array

PHP function Edit on GitHub ✎

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

Gets multiple variables and optionally filters them

Description

filter_var_array(array $array, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null

Filter an associative Array of values using FILTER_VALIDATE_* validation filters, FILTER_SANITIZE_* sanitization filters, or custom filters.

Parameters

array

An associative Array containing the data to filter.

options

Either an associative array of options, or the filter to apply to each entry, which can either be a validation filter by using one of the FILTER_VALIDATE_* constants, or a sanitization filter by using one of the FILTER_SANITIZE_* constants.

The option array is an associative array where the key corresponds to a key in the input array and the associated value is either the filter to apply to this entry, or an associative array describing how and which filter should be applied to this entry.

The associative array describing how a filter should be applied must contain the 'filter' key whose associated value is the filter to apply, which can be one of the FILTER_VALIDATE_*, FILTER_SANITIZE_*, FILTER_UNSAFE_RAW, or FILTER_CALLBACK constants. It can optionally contain the 'flags' key which specifies any flags that apply to the filter, and the 'options' key which specifies any options that apply to the filter.

add_empty

Add missing keys as null to the return value.

Return Values

On success, an Array containing the values of the requested variables.

On failure, false is returned.

Missing entries from the input array are added to the returned Array as null if add_empty is true, and are omitted entirely if it is false.

An entry of the returned Array will be false if the filter fails, unless the FILTER_NULL_ON_FAILURE flag is used, in which case it will be null. With the FILTER_FORCE_ARRAY flag, that failure value is wrapped in a one element Array like any other result.

Examples

A filter_var_array() example

Entries are filtered as scalars unless FILTER_REQUIRE_ARRAY or FILTER_FORCE_ARRAY is used. The FILTER_REQUIRE_SCALAR flag on testscalar below therefore only states that default explicitly.

php
<?php

$data = [
    'product_id' => 'libgd<script>',
    'component'  => '10',
    'versions'   => '2.0.33',
    'testscalar' => ['2', '23', '10', '12'],
    'testarray'  => '2',
];

$filters = [
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => [
        'filter'   => FILTER_VALIDATE_INT,
        'flags'    => FILTER_FORCE_ARRAY,
        'options'  => [
            'min_range' => 1,
            'max_range' => 10,
        ],
    ],
    'versions'     => [
        'filter' => FILTER_SANITIZE_ENCODED
    ],
    'testscalar'   => [
        'filter' => FILTER_VALIDATE_INT,
        'flags'  => FILTER_REQUIRE_SCALAR,
    ],
    'testarray'    => [
        'filter' => FILTER_VALIDATE_INT,
        'flags'  => FILTER_FORCE_ARRAY,
    ],
    'doesnotexist' => FILTER_VALIDATE_INT,
];

var_dump(filter_var_array($data, $filters));

?>

The above example will output:

output
array(6) {
  ["product_id"]=>
  string(17) "libgd%3Cscript%3E"
  ["component"]=>
  array(1) {
    [0]=>
    int(10)
  }
  ["versions"]=>
  string(6) "2.0.33"
  ["testscalar"]=>
  bool(false)
  ["testarray"]=>
  array(1) {
    [0]=>
    int(2)
  }
  ["doesnotexist"]=>
  NULL
}

Applying a single filter to all values

When options is an Integer, the same filter is applied to every entry in the array.

php
<?php
$data = [
    'name'  => '<b>John</b>',
    'email' => 'john@example<script>.com',
    'bio'   => 'Developer & writer',
];

var_dump(filter_var_array($data, FILTER_SANITIZE_SPECIAL_CHARS));
?>

The above example will output:

output
array(3) {
  ["name"]=>
  string(27) "&#60;b&#62;John&#60;/b&#62;"
  ["email"]=>
  string(32) "john@example&#60;script&#62;.com"
  ["bio"]=>
  string(22) "Developer &#38; writer"
}

Using FILTER_CALLBACK

php
<?php
$data = [
    'name'  => '  John Doe  ',
    'city'  => '  New York  ',
];

$options = [
    'name' => [
        'filter'  => FILTER_CALLBACK,
        'options' => 'trim',
    ],
    'city' => [
        'filter'  => FILTER_CALLBACK,
        'options' => function ($value) {
            return strtoupper(trim($value));
        },
    ],
];

var_dump(filter_var_array($data, $options));
?>

The above example will output:

output
array(2) {
  ["name"]=>
  string(8) "John Doe"
  ["city"]=>
  string(8) "NEW YORK"
}

See Also

Source: reference/filter/functions/filter-var-array.xml · from the official PHP manual (php/doc-en)