Bei der Verarbeitung von Formulardaten in PHP müssen oft mehrere Eingabefelder gleichzeitig geprüft werden. Die Funktion filter_var_array() ermöglicht es, ein komplettes Array mit unterschiedlichen Filterregeln in einem einzigen Aufruf zu validieren und zu bereinigen. Statt jeden Wert einzeln mit filter_var() zu prüfen, definiert der Entwickler ein Regel-Array, das jedem Schlüssel einen passenden Filter zuordnet. Dieses Tutorial erklärt die Syntax, zeigt die wichtigsten Filter-Konstanten und demonstriert den Einsatz anhand praxisnaher Beispiele.

Schauen wir uns zuerst die Funktionsweise und die Signatur von filter_var_array() an.
Was macht filter_var_array()?
Die Funktion nimmt ein assoziatives Array mit Eingabedaten entgegen und wendet auf jeden Wert einen definierten Filter an. Das Ergebnis ist ein neues Array mit den gefilterten Werten.
<?php
filter_var_array(array $data, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null
Der erste Parameter $data ist das zu filternde Array. Der zweite Parameter $options enthält entweder einen einzelnen Filter, der auf alle Werte angewendet wird, oder ein assoziatives Array mit individuellen Filterregeln pro Schlüssel. Der optionale dritte Parameter $add_empty bestimmt, ob fehlende Schlüssel als null im Ergebnis erscheinen sollen. Besteht ein Wert die Validierung nicht, gibt die Funktion für diesen Schlüssel false zurück. Fehlt ein Schlüssel im Eingabe-Array, wird er mit null belegt.
filter_var_array() vs. filter_var()
Beide Funktionen nutzen dieselben Filter-Konstanten, unterscheiden sich jedoch im Anwendungsbereich. Während filter_var() einen einzelnen Wert prüft, verarbeitet filter_var_array() ein komplettes Array in einem Schritt.
<?php
/* Einzeln mit filter_var() */
$email = filter_var('test@example.com', FILTER_VALIDATE_EMAIL);
$alter = filter_var('25', FILTER_VALIDATE_INT);
/* Gebündelt mit filter_var_array() */
$daten = [
'email' => 'test@example.com',
'alter' => '25'
];
$filter = [
'email' => FILTER_VALIDATE_EMAIL,
'alter' => FILTER_VALIDATE_INT
];
$ergebnis = filter_var_array($daten, $filter);
print_r($ergebnis);
/*
Array
(
[email] => test@example.com
[alter] => 25
)
*/
Bei wenigen Werten ist filter_var() völlig ausreichend. Sobald jedoch drei oder mehr Felder geprüft werden müssen, sorgt filter_var_array() für übersichtlicheren und besser wartbaren Code.
Die wichtigsten Validierungs-Filter
PHP stellt eine Reihe vordefinierter Konstanten bereit, mit denen sich gängige Datenformate validieren lassen. Die folgende Übersicht zeigt die am häufigsten verwendeten Filter.
flowchart LR
A["Eingabe-Array"] --> B["filter_var_array()"]
B --> C{"Ergebnis pro Feld"}
C -->|"bestanden"| D["bereinigter Wert"]
C -->|"nicht bestanden"| E["false"]
C -->|"Feld fehlt"| F["null"]
FILTER_VALIDATE_EMAIL und FILTER_VALIDATE_URL
Diese beiden Filter prüfen, ob ein Wert eine syntaktisch korrekte E-Mail-Adresse beziehungsweise eine gültige URL enthält.
<?php
$daten = [
'email' => 'max@beispiel.de',
'webseite' => 'https://example.com',
'falsche_email' => 'keine-email',
'falsche_url' => 'nicht-gueltig'
];
$filter = [
'email' => FILTER_VALIDATE_EMAIL,
'webseite' => FILTER_VALIDATE_URL,
'falsche_email' => FILTER_VALIDATE_EMAIL,
'falsche_url' => FILTER_VALIDATE_URL
];
$ergebnis = filter_var_array($daten, $filter);
print_r($ergebnis);
/*
Array
(
[email] => max@beispiel.de
[webseite] => https://example.com
[falsche_email] =>
[falsche_url] =>
)
*/
Gültige Werte werden unverändert zurückgegeben. Bei ungültigen Werten gibt der Filter false zurück. So lässt sich anschließend einfach prüfen, welche Felder die Validierung nicht bestanden haben.
FILTER_VALIDATE_INT mit Optionen
Der Integer-Filter unterstützt zusätzliche Optionen wie min_range und max_range, um den erlaubten Wertebereich einzuschränken.
<?php
$daten = [
'alter' => '25',
'menge' => '150',
'ungueltig' => 'abc'
];
$filter = [
'alter' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 120]
],
'menge' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 100]
],
'ungueltig' => FILTER_VALIDATE_INT
];
$ergebnis = filter_var_array($daten, $filter);
print_r($ergebnis);
/*
Array
(
[alter] => 25
[menge] =>
[ungueltig] =>
)
*/
/* $ergebnis['menge'] ist false, da 150 > 100 */
/* $ergebnis['ungueltig'] ist false, da 'abc' kein Integer ist */
Der Wert 150 überschreitet den festgelegten Maximalwert von 100 und wird daher als ungültig eingestuft. Die Kombination aus Filter-Konstante und Options-Array bietet eine präzise Kontrolle über die erlaubten Wertebereiche.
Sanitize-Filter zum Bereinigen von Eingaben
Während Validierungs-Filter prüfen, ob ein Wert einem bestimmten Format entspricht, verändern Sanitize-Filter den Wert aktiv und entfernen unerwünschte Zeichen.
<?php
$daten = [
'name' => '<b>Max</b> Mustermann',
'telefon' => '+49 (0) 123-456',
'kommentar' => 'Hallo <script>alert("XSS")</script>'
];
$filter = [
'name' => FILTER_SANITIZE_SPECIAL_CHARS,
'telefon' => FILTER_SANITIZE_NUMBER_INT,
'kommentar' => FILTER_SANITIZE_SPECIAL_CHARS
];
$sauber = filter_var_array($daten, $filter);
print_r($sauber);
/*
Array
(
[name] => <b>Max</b> Mustermann
[telefon] => +490123-456
[kommentar] => Hallo <script>alert("XSS")</script>
)
*/
FILTER_SANITIZE_SPECIAL_CHARS wandelt Sonderzeichen in HTML-Entities um und schützt so vor Cross-Site-Scripting. FILTER_SANITIZE_NUMBER_INT entfernt alle Zeichen außer Ziffern, Plus und Minus. Der ehemals verfügbare Filter FILTER_SANITIZE_STRING ist seit PHP 8.1 als veraltet markiert und sollte nicht mehr verwendet werden. Stattdessen eignet sich FILTER_SANITIZE_SPECIAL_CHARS als Alternative.
Praxisbeispiel: Kontaktformular validieren
Ein typischer Anwendungsfall ist die Validierung eines Kontaktformulars, bei dem Name, E-Mail-Adresse und Nachricht gleichzeitig geprüft werden.
<?php
$eingaben = [
'name' => $_POST['name'] ?? '',
'email' => $_POST['email'] ?? '',
'alter' => $_POST['alter'] ?? '',
'nachricht' => $_POST['nachricht'] ?? ''
];
$filter = [
'name' => [
'filter' => FILTER_SANITIZE_SPECIAL_CHARS,
'flags' => FILTER_FLAG_STRIP_LOW
],
'email' => FILTER_VALIDATE_EMAIL,
'alter' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 120]
],
'nachricht' => FILTER_SANITIZE_SPECIAL_CHARS
];
$sauber = filter_var_array($eingaben, $filter);
$fehler = [];
if ($sauber['email'] === false) {
$fehler[] = 'Bitte eine gültige E-Mail-Adresse eingeben.';
}
if ($sauber['alter'] === false) {
$fehler[] = 'Bitte ein gültiges Alter zwischen 18 und 120 angeben.';
}
if (empty($sauber['name'])) {
$fehler[] = 'Bitte einen Namen eingeben.';
}
if (count($fehler) > 0) {
foreach ($fehler as $meldung) {
echo $meldung . "\n";
}
} else {
echo 'Alle Eingaben sind gültig.';
}
Dieses Muster trennt die Filterlogik sauber von der Fehlerbehandlung. Zuerst werden alle Werte gefiltert, danach wird das Ergebnis-Array auf false-Werte geprüft. So entsteht ein übersichtlicher Validierungsablauf, der sich bei zusätzlichen Feldern einfach erweitern lässt.
Erweiterte Optionen und FILTER_CALLBACK
Neben den vordefinierten Filtern bietet filter_var_array() die Möglichkeit, eigene Filterfunktionen über FILTER_CALLBACK einzubinden.
<?php
$daten = [
'benutzername' => ' Max Mustermann ',
'plz' => ' 80331 '
];
$filter = [
'benutzername' => [
'filter' => FILTER_CALLBACK,
'options' => function($wert) {
$getrimmt = trim($wert);
if (strlen($getrimmt) < 2) {
return false;
}
return $getrimmt;
}
],
'plz' => [
'filter' => FILTER_CALLBACK,
'options' => function($wert) {
$bereinigt = trim($wert);
if (preg_match('/^\d{5}$/', $bereinigt)) {
return $bereinigt;
}
return false;
}
]
];
$ergebnis = filter_var_array($daten, $filter);
print_r($ergebnis);
/*
Array
(
[benutzername] => Max Mustermann
[plz] => 80331
)
*/
Die Callback-Funktion erhält den Rohwert und gibt entweder den bereinigten Wert oder false zurück. So lassen sich beliebig komplexe Validierungsregeln umsetzen, die über die Möglichkeiten der eingebauten Filter hinausgehen. Eigene Prüfungen für Postleitzahlen, Telefonnummern oder benutzerdefinierte Formate werden damit problemlos realisierbar.
Fazit
Die Funktion filter_var_array() ist ein effizientes Werkzeug zur gleichzeitigen Validierung und Bereinigung mehrerer Eingabewerte in PHP. Sie kombiniert Validierungs-Filter wie FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_INT und FILTER_VALIDATE_URL mit Sanitize-Filtern wie FILTER_SANITIZE_SPECIAL_CHARS in einem einzigen Funktionsaufruf. Werte, die die Validierung nicht bestehen, werden mit false markiert, fehlende Schlüssel mit null. Durch die erweiterten Optionen wie min_range und max_range sowie FILTER_CALLBACK lassen sich auch individuelle Filterregeln definieren. Gegenüber der Einzelvalidierung mit filter_var() bietet filter_var_array() bei mehreren Feldern eine deutlich kompaktere und besser wartbare Lösung, die sich besonders für die Formularvalidierung eignet.