Start · Sprachen · PHP · Referenz · filter_var_array

filter_var_array

Funktion

Filtert mehrere Werte eines Arrays in einem Schritt anhand vorgegebener Filter-Regeln und gibt das gefilterte Array zurück.

seit PHP 5.2.0 Kategorie: string

Signatur

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

Beschreibung

filter_var_array() ermöglicht es, mehrere Einträge eines assoziativen Arrays auf einmal zu validieren oder zu bereinigen, ohne jeden Wert einzeln durch filter_var() schicken zu müssen. Das ist besonders nützlich, wenn Formulardaten ($_POST, $_GET) oder andere Eingabequellen gesammelt gefiltert werden sollen.

Der Parameter $options kann entweder eine einzelne FILTER_*-Konstante sein, die dann auf alle Schlüssel angewendet wird, oder ein assoziatives Array, dessen Schlüssel den zu filternden Array-Schlüsseln entsprechen. Jeder Eintrag in diesem Definitions-Array kann ein einfacher Filter-Integer oder ein Array mit den Schlüsseln filter, flags und options sein.

Ist $add_empty auf true gesetzt (Standard), werden Schlüssel, die im Eingabe-Array fehlen, aber in $options definiert sind, mit dem Wert null in das Ergebnis-Array aufgenommen. Setzt man es auf false, werden fehlende Schlüssel im Rückgabe-Array weggelassen.

Die Funktion ist besonders hilfreich bei der Verarbeitung von HTTP-Eingaben, da sie Sicherheits- und Validierungslogik kompakt und übersichtlich zusammenfasst. Für einzelne Variablen steht filter_var() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$array Pflicht array Das Eingabe-Array, dessen Werte gefiltert werden sollen. Typischerweise ein assoziatives Array wie $_POST oder $_GET.
$options array|int FILTER_DEFAULT Entweder eine einzelne FILTER_*-Konstante, die auf alle Werte angewendet wird, oder ein assoziatives Array mit Filterdefinitionen je Schlüssel. Jede Definition kann eine Konstante oder ein Array mit filter, flags und options sein.
$add_empty bool true Wenn true, werden im Eingabe-Array fehlende, aber in $options definierte Schlüssel mit null ins Ergebnis aufgenommen. Bei false werden sie weggelassen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den gefilterten Werten zurück. Bei Schlüsseln, deren Wert die Validierung nicht besteht, enthält das Array false für diesen Schlüssel. Im Fehlerfall (z. B. ungültiger Filter) wird false zurückgegeben.

Beispiele

Formulardaten auf einmal validieren und bereinigen

<?php
$formData = [
    'username' => '  Alice123  ',
    'age'      => '28',
    'email'    => 'alice@example.com',
    'website'  => 'https://alice.example.com',
    'score'    => '9.5',
];

$filters = [
    'username' => [
        'filter'  => FILTER_SANITIZE_SPECIAL_CHARS,
    ],
    'age'      => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 1, 'max_range' => 120],
    ],
    'email'    => FILTER_VALIDATE_EMAIL,
    'website'  => FILTER_VALIDATE_URL,
    'score'    => [
        'filter' => FILTER_VALIDATE_FLOAT,
        'flags'  => FILTER_FLAG_ALLOW_FRACTION,
    ],
];

$result = filter_var_array($formData, $filters);
var_export($result);
array ( 'username' => ' Alice123 ', 'age' => 28, 'email' => 'alice@example.com', 'website' => 'https://alice.example.com', 'score' => 9.5, )

Fehlende und ungültige Felder erkennen

<?php
$input = [
    'email' => 'kein-gueltiges-email',
    'age'   => '200',
    // 'website' fehlt absichtlich
];

$filters = [
    'email'   => FILTER_VALIDATE_EMAIL,
    'age'     => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 1, 'max_range' => 120],
    ],
    'website' => FILTER_VALIDATE_URL,
];

$result = filter_var_array($input, $filters, add_empty: true);

foreach ($result as $key => $value) {
    if ($value === false) {
        echo "'$key' ist ungültig.\n";
    } elseif ($value === null) {
        echo "'$key' fehlt im Eingabe-Array.\n";
    } else {
        echo "'$key' ist gültig: $value\n";
    }
}
'email' ist ungültig. 'age' ist ungültig. 'website' fehlt im Eingabe-Array.

// Wichtig · Fallstricke

Sicherheitshinweis: filter_var_array() ist kein vollständiger Schutz gegen alle Arten von Eingabe-Manipulation. Validierungsfilter (z. B. FILTER_VALIDATE_EMAIL) prüfen nur das Format, nicht die Existenz oder Sicherheit des Wertes. Bereinigungsfilter (Sanitize) entfernen oder kodieren potenziell gefährliche Zeichen, ersetzen aber keine kontextspezifische Ausgabekodierung (z. B. htmlspecialchars() für HTML-Ausgabe).

Bei Verwendung von FILTER_CALLBACK kann eine eigene Callback-Funktion als Filter eingesetzt werden – dabei sollte die Callback-Funktion selbst sicher implementiert sein.

Zu beachten: Wenn ein Schlüssel im $array vorhanden ist, aber kein entsprechender Filtereintrag in $options existiert, wird dieser Schlüssel nicht in das Ergebnis übernommen. Das Ergebnis enthält also nur die in $options definierten Schlüssel.