W3docs

filter_input_array()

Aprende cómo filter_input_array() de PHP valida y sanea una solicitud GET o POST completa de una vez: sintaxis, opciones por campo, flags y resultados false vs null.

Introducción

filter_input_array() filtra un lote completo de entrada externa — cada campo de una solicitud $_GET o $_POST — en una sola llamada, en lugar de extraer valores de las superglobales uno por uno. Se le proporciona una definición que mapea cada campo esperado a un filtro (validar o sanear), y devuelve un array de valores limpiados y verificados por tipo.

Esta página cubre la sintaxis, cómo leer el resultado (la diferencia entre false, null y una clave ausente), cómo adjuntar opciones y flags a campos individuales, y cómo filter_input_array() se compara con sus funciones hermanas de valor único y array arbitrario.

Para una visión más amplia de la extensión de filtros de PHP, consulta PHP Filters y PHP Advanced Filters.

Sintaxis

filter_input_array(int $type, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null
ParámetroSignificado
$typeQué fuente de entrada leer: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.
$optionsUn ID de filtro único aplicado a todos los campos, o un array asociativo que mapea cada nombre de campo a su propio filtro / definición (el caso habitual).
$add_emptyCuando es true (valor por defecto), los campos nombrados en la definición pero ausentes en la entrada aparecen en el resultado como null. Ponlo a false para omitirlos.

Valor de retorno:

  • Un array de valores filtrados si tiene éxito.
  • false si $type no es válido.
  • null si la fuente de entrada solicitada no tiene datos en absoluto (y $add_empty es false).

La parte crucial es leer las entradas individuales, no el valor de retorno general:

Resultado por campoSignificado
El valor limpiadoEl campo pasó su filtro.
falseUn filtro de validación rechazó el valor (p. ej. "abc" para FILTER_VALIDATE_INT).
nullEl campo estaba nombrado en la definición pero no estaba presente en la entrada.

Un ejemplo autocontenido

filter_input_array() lee de las fuentes reales INPUT_POST / INPUT_GET, que solo existen durante una solicitud web. Para demostrar las definiciones de filtro de una manera que puedas ejecutar en la línea de comandos, el fragmento a continuación utiliza filter_var_array() — acepta exactamente la misma definición $filters y aplica el mismo motor, por lo que la salida es idéntica a lo que filter_input_array(INPUT_POST, $filters) produciría para esos datos.

<?php

// In a real request this array would be $_POST.
$input = [
    'name'  => '<b>Jane</b>',
    'age'   => '30',
    'email' => '[email protected]',
];

$filters = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS, // sanitize: escape HTML
    'age'   => FILTER_VALIDATE_INT,                // validate: must be an int
    'email' => FILTER_VALIDATE_EMAIL,              // validate: must be an email
];

$data = filter_var_array($input, $filters);
// In a controller you would write:
// $data = filter_input_array(INPUT_POST, $filters);

print_r($data);

Salida:

Array
(
    [name] => &lt;b&gt;Jane&lt;/b&gt;
    [age] => 30
    [email] => [email protected]
)

Observa que name fue saneado (las etiquetas fueron escapadas) mientras que age y email fueron validados (devueltos como un int real y un string verificado). Un campo que no está listado en $filters se descarta completamente del resultado.

Manejo de campos inválidos y ausentes

Dado que una validación fallida produce false y un campo ausente produce null, nunca asumas que cada entrada es utilizable. Comprueba antes de confiar en los datos:

<?php

$input = [
    'age'   => 'not-a-number',
    'email' => 'bad-email',
];

$filters = [
    'age'     => FILTER_VALIDATE_INT,
    'email'   => FILTER_VALIDATE_EMAIL,
    'missing' => FILTER_VALIDATE_INT, // declared, but absent from input
];

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

print_r($data);

Salida:

Array
(
    [age] =>
    [email] =>
    [missing] =>
)

print_r no muestra nada después de las claves porque age y email son false (inválidos) y missing es null (ausente). En código real, distingue entre ellos explícitamente:

<?php
if ($data['age'] === false) {
    echo "Age is not a valid integer.";
} elseif ($data['age'] === null) {
    echo "Age was not submitted.";
} else {
    echo "Age is {$data['age']}.";
}

Opciones y flags por campo

En lugar de una constante de filtro simple, un campo puede ser un array anidado con las claves filter, options y flags — aquí es donde la función se vuelve poderosa. Usa options para cosas como un rango de enteros, y el flag FILTER_REQUIRE_ARRAY cuando un campo llega como array (p. ej. una selección múltiple o name="tags[]").

<?php

$input = [
    'age'  => '200',
    'tags' => ['<a>', '<b>'],
];

$args = [
    'age' => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 0, 'max_range' => 120],
    ],
    'tags' => [
        'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
        'flags'  => FILTER_REQUIRE_ARRAY, // apply the filter to each element
    ],
];

print_r(filter_var_array($input, $args));

Salida:

Array
(
    [age] =>
    [tags] => Array
        (
            [0] => &lt;a&gt;
            [1] => &lt;b&gt;
        )

)

age es false porque 200 está fuera del rango 0–120, y cada elemento de tags fue saneado individualmente gracias a FILTER_REQUIRE_ARRAY.

Comparación con funciones relacionadas

FunciónLee deForma de entrada
filter_input()Superglobal INPUT_*un único campo
filter_input_array()Superglobal INPUT_*un array de solicitud completo
filter_var()Una variable que pasasun valor único
filter_var_array()Una variable que pasasun array que pasas

Usa filter_input_array() cuando los datos residan en $_GET/$_POST/etc.; usa filter_var_array() cuando ya tengas el array en una variable.

Compatibilidad de versiones de PHP

FILTER_SANITIZE_STRING fue deprecado en PHP 8.1 y eliminado en PHP 8.2. Para el saneado de strings en PHP moderno, usa FILTER_SANITIZE_FULL_SPECIAL_CHARS (como en los ejemplos anteriores) o, para validación, un filtro dedicado como FILTER_VALIDATE_EMAIL.

Por qué usarlo

  • Seguridad. Filtrar toda la solicitud en un solo lugar evita que los valores no validados se filtren en consultas o marcado. Combínalo con validación de formularios y sentencias preparadas.
  • Legibilidad. La definición $filters actúa como un esquema para la entrada esperada, separando las reglas de validación de la lógica de negocio.
  • Consistencia. Cada campo pasa por el mismo motor verificado, por lo que no tienes que escribir comprobaciones isset() + is_numeric() manualmente por campo.

Consulta también PHP Superglobals para saber de dónde proviene esta entrada.

Práctica

Práctica
En PHP, ¿cuál es el propósito de la función filter_input_array según la información proporcionada en el sitio w3docs?
En PHP, ¿cuál es el propósito de la función filter_input_array según la información proporcionada en el sitio w3docs?
Was this page helpful?