W3docs

filter_var_array()

PHP ofrece una función filter_var_array() para filtrar y validar múltiples variables de entrada al mismo tiempo de forma eficiente.

Introducción

PHP proporciona una variedad de funciones integradas para filtrar y validar datos de entrada del usuario. Una de ellas es filter_var_array(), que aplica filtros a muchas variables a la vez en lugar de llamar a filter_var() repetidamente. Es la herramienta principal para procesar formularios de forma limpia: describes las reglas para cada campo en un único array, pasas la entrada sin procesar y obtienes de vuelta un resultado completamente validado y saneado.

Este capítulo cubre la sintaxis, las tres formas de definir filtros, el comportamiento del indicador $add_empty, cómo interpretar el valor de retorno y los errores comunes, con ejemplos ejecutables.

Sintaxis

La sintaxis de filter_var_array() es la siguiente:

La sintaxis PHP de filter_var_array()

filter_var_array ( array $data , mixed $definition [, bool $add_empty = true ] ) : mixed
ParámetroSignificado
$dataUn array asociativo de valores de entrada a filtrar (por ejemplo, $_POST o $_GET).
$definitionCómo filtrar. Puede ser una constante de filtro única aplicada a todos los valores, o un array que asigna a cada clave su propio filtro y opciones.
$add_emptySi es true (valor por defecto), las claves presentes en $definition pero ausentes en $data se añaden al resultado con el valor null. Si es false, se omiten.

La función devuelve el array filtrado en caso de éxito, o false en caso de fallo (por ejemplo, si $data no es un array).

Las tres formas de definir filtros

El parámetro $definition es el núcleo de esta función. Puede adoptar tres formas.

1. Un filtro para todos los valores — pasa una constante de filtro única:

<?php
$data = ['a' => '1', 'b' => 'not-a-number', 'c' => '42'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
print_r($result);

Salida — los valores que no superan el filtro se convierten en false:

Array
(
    [a] => 1
    [b] =>
    [c] => 42
)

2. Un mapa de filtros por clave — asigna a cada clave su propia constante de filtro:

<?php
$data = [
    'name'  => '  John  ',
    'age'   => '30',
    'email' => '[email protected]',
];

$definition = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

print_r(filter_var_array($data, $definition));
Array
(
    [name] =>   John  
    [age] => 30
    [email] => [email protected]
)

3. Un array por clave con filtro, flags y opciones — para un control más preciso, asigna una clave a un array que especifica el filter junto con flags y options:

<?php
$data = ['age' => '150', 'tags' => ['php', 'mysql']];

$definition = [
    'age' => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 0, 'max_range' => 120],
    ],
    'tags' => [
        'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
        'flags'  => FILTER_REQUIRE_ARRAY,
    ],
];

var_dump(filter_var_array($data, $definition));
array(2) {
  ["age"]=>
  bool(false)
  ["tags"]=>
  array(2) {
    [0]=>
    string(3) "php"
    [1]=>
    string(5) "mysql"
  }
}

age es false porque 150 está fuera del rango 0–120, y FILTER_REQUIRE_ARRAY le indica al filtro que trate tags como un array y sanee cada elemento.

Uso con entrada de formulario

En código real, el array $data suele ser una superglobal como $_POST. La misma definición que acabas de ver aplica las reglas y almacena los valores limpios en $result:

Ejemplo de filter_var_array() en PHP

<?php

$filters = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

// $add_empty = false skips keys missing from $_POST instead of adding them as null
$result = filter_var_array($_POST, $filters, false);

if ($result === false || $result['email'] === false) {
    // Handle missing or invalid input
    echo 'Please correct the form.';
} else {
    // $result now holds clean, validated values
}

Ten en cuenta que una validación fallida produce false para esa clave, mientras que la función solo devuelve false en general cuando $data en sí mismo no es válido. Siempre comprueba ambos casos. Para filtrar $_POST o $_GET directamente desde el flujo de entrada, consulta la función relacionada filter_input_array().

Nota: FILTER_SANITIZE_STRING fue eliminado en PHP 8.0. Utiliza FILTER_SANITIZE_FULL_SPECIAL_CHARS en su lugar.

Beneficios

Aplicar filter_var_array() mejora la seguridad y confiabilidad de tu aplicación PHP al procesar muchas variables en una sola llamada. Validar la entrada antes de procesarla garantiza que tu aplicación solo acepte datos esperados, reduciendo el riesgo de inyecciones y errores por datos malformados. Mantener las reglas en un array $definition declarativo también separa la validación de la lógica de negocio, haciendo los scripts más modulares y fáciles de mantener.

Conclusión

filter_var_array() es la forma eficiente de validar y sanear todo un conjunto de variables a la vez. Elige la forma de definición que mejor se adapte a tu necesidad — un filtro para todos, un mapa por clave, o arrays de opciones por clave — y comprueba siempre si hay false por campo. Para profundizar más, lee el capítulo de descripción general de filtros PHP y el de validación de formularios PHP.

Práctica

Práctica
¿Cuál es el propósito de la función 'filter_var_array()' en PHP?
¿Cuál es el propósito de la función 'filter_var_array()' en PHP?
Was this page helpful?