Hallo,
Nicht ganz... 
Aber Du machst jetzt ja auch was anderes... Das ist nicht die gleiche Logik, die ich Dir gegeben habe. Soll es denn so sein oder hast Du Dich vertan?
Bei Dir passiert folgendes:
if ( !isset($data[0]) ) { // wenn der Index 0 im Array $data nicht existiert...
$fehler = empty( $data[0] ); //...dann prüfe, ob das Element mit dem Index 0 leer ist
} else {
$fehler = !empty( $data[0] ); //...sonst prüfe, ob das Element mit dem Index 0 nicht leer ist
}
Alles anzeigen
Das macht so eigentlich keinen Sinn, denn das erste Element existiert immer bei Deiner Grundlage. Damit würde er eh nie das empty() zwischen dem Fragezeichen und dem Doppelpunkt anwenden.
Bei mir war die Logik anders:
if ( isset($data[2]) ) { // wenn ein Element mit dem Index 2 ( also ein drittes Element! ) existiert
$fehler = empty( $data[0] ) || $data[0] != $data[2]; // prüfe ob Element mit Index 0 leer ist ODER Element mit Index 0 ungleich Element mit Index 2 ist
} else {
$fehler = empty( $data[0] ); // prüfe nur ob Element mit Index 0 leer ist.
}
Alles anzeigen
Wenn Du die Logik mit dem Vergleich der Eingabe nicht mehr benötigst, ist das auch kürzer und einfacher abbildbar:
if ( empty($data[0]) ) {
$fehler = $data[1]; // Fehlermeldung in $fehler schreiben
} else {
$fehler = null; // kein Fehler definiert
}
Alles anzeigen
was das gleiche ist, wie:
$fehler = empty( $data[0] )? $data[1]: null;
Dadurch hast Du in $fehler ein Array, in dem jedes Element entweder eine Fehlermeldung oder null ist.
array_filter() "schmeisst" nun jedes Element, das auf bool gecastet nicht true ergibt aus dem Array raus. Und da man bei array_filter die Callback-Funktion auch weglassen kann, sieht das ganze in Kurzform so aus:
$fehler = array_filter( $fehler );
Das einzige, was ich gemacht habe ist, dass ich anstelle von $fehler die komplette array_map()-Verarbeitung als Parameter an array_filter() übergeben habe, was am Ende nur das Ergebnis von array_map() ist, nämlich das Array $fehler mit den Fehlermeldungen oder eben dem Wert null in den Elementen.