816 Stimmen

PHP: Alle leeren Elemente aus String-Array entfernen

Tipp von Stefan Trost | Letztes Update am 01.02.2023 | Erstellt am 10.01.2013

In diesem Tutorial möchte ich euch zeigen, wie ihr sämtliche leeren String-Elemente aus einem Array heraus löschen könnt.

Dazu schauen wir uns zunächst eine allgemeine Lösung zur generellen Löschung von Array-Elementen an, bevor wir zu einer leicht umsetzbaren Lösung von leeren Strings aus einem Array kommen. Zuletzt erweitern wir diese Lösung um einen Whitespace-Filter, um auch diejenigen Elemente aus dem Array zu löschen, die zum Beispiel nur Leerzeichen enthalten.

Allgemeine Funktion zur Löschung von Array-Elementen

Um bestimmte Elemente aus einem Array über ihren Index zu entfernen, kann man sich der Funktion unset() bedienen, zum Beispiel:

$arr = array('a', 'b', 'c');
unset($arr[1]);  // löscht 'b' aus dem Array

Da die Zählung der Array-Indices bei 0 beginnt, löschen wir hier mit "1" das zweite Element aus dem Array.

Um alle leeren Elemente aus einem Array mit Strings zu löschen, können wir alle Elemente durchlaufen und mit unset() die ungewünschten Elemente entfernen:

$arr = array('a', '', 'b', '', 'c', '', '');

for ($i = count($arr) - 1; $i >= 0; $i--) {
   if ($arr[$i] == '') unset($arr[$i]);
}

// array enthält nur noch 'a', 'b' und 'c'

Wir durchlaufen den Array rückwärts, da sich durch die Löschung die Länge des Arrays ständig ändern kann. Innerhalb der Schleife prüfen wir jedes Element auf einen leeren String und rufen unset() auf, wenn dies zutrifft.

Leere Elemente aus einem String-Array löschen - Die einfache Lösung

Es gibt allerdings noch eine viel einfachere Lösung:

$arr = array('a', '', 'b', '', 'c', '', '');

$arr = array_filter($arr);
// array enthält nur noch 'a', 'b' und 'c'

Die Funktion array_filter() gibt uns einen neuen Array zurück aus dem alle Elemente gelöscht wurden, für die eine optionale Callback-Funktion "false" liefert. Da wir keine Callback Funktion (als zweiten Parameter) angegeben haben und in PHP ein leerer String (wie auch null oder false) automatisch "false" zurück gibt, können wir array_filter() hier auf diese Weise einsetzen, um alle leeren Elemente aus dem Array zu entfernen beziehungsweise zu filtern.

Auch Whitespace filtern - Die erweiterte Lösung

Wenn wir einen String auch dann aus dem Array schmeißen möchten, wenn er nur Whitespace enthält, also zum Beispiel nur Leerzeichen, Tabs oder Zeilenumbrüche, können wir unser erstes Beispiel, das mit unset() arbeitet, auf die folgende Weise erweitern:

$arr = array('a', '', 'b', ' ', 'c', '', '     ');

for ($i = count($arr) - 1; $i >= 0; $i--) {
   if (trim($arr[$i]) == '') unset ($arr[$i]);
}

// array enthält nur noch 'a', 'b' und 'c'

Statt ein Array-Element direkt zu prüfen, übergeben wir das Element zunächst an die Funktion trim(), die sämtlichen Whitespace vorne und hinten vom String abschneidet. Dadurch verwandelt sich auch jedes Element, das nur aus Whitespace besteht, in ein leeres Element, welches dann gelöscht wird.

Natürlich möchten wir auch unser zweites Beispiel, das mit array_filter() arbeitet, um die Whitespace-Funktionalität erweitern. Dafür bringen wir eine Callback-Funktion zum Einsatz, die wir array_filter() als zweiten Parameter übergeben:

function checkElement($var) {
   return trim($var) != '';
}


$arr = array('a', '', 'b', ' ', 'c', '', '     ');

$arr = array_filter($arr, "checkElement");
// array enthält nur noch 'a', 'b' und 'c'

Die Callback-Funktion haben wir so programmiert, dass Sie uns für einen leeren String oder einem String, der nur Whitespace enthält, "false" liefert. Dafür arbeiten wir wieder mit trim() wie in unserem Beispiel-Code zuvor. Für alle anderen Fälle liefert uns die Funktion "true" sodass das entsprechende Element im Array enthalten bleibt.

Wenn wir andere Kriterien zum Filtern der Array-Elemente benötigen, können wir die Callback-Funktion natürlich noch beliebig an unsere Bedürfnisse anpassen und erweitern.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.