2 8 Stimmen

PHP: Alle leeren Elemente aus String Array entfernen

Tipp von NetGuy | 10.01.2013 um 15:37 Uhr

Um bestimmte Elemente aus einem Array 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

Um alle leeren Elemente aus einem Array mit Strings zu löschen, kann man alle Elemente durchlaufen und mit unset() die ungewünschten 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.

Die einfache Lösung

Betrachten wir einen String Array, geht es aber noch viel einfacher:

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

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

Die Funktion array_filter liefert ein neues Array zurück aus dem alle Elemente gelöscht wurden, für die eine optionale Callback Funktion false liefert. Da wir keine Callback Funktion angeben und in PHP ein leerer String (wie auch null oder false) false zurück gibt, können wir array_filter hier so einsetzen.

Auch Whitespace filtern

Wenn wir einen String auch dann aus dem Array schmeißen möchten, wenn er nur Whitespace enthält, können wir unser Beispiel so umändern (wir fügen trim() hinzu):

$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'

Und hier die Lösung mit einer Callback-Funktion:

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


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

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

Die Callback Funktion haben wir so definiert, dass Sie uns immer bei einem leeren String oder einem String, der nur Whitespace enthält, false liefert. Ansonsten liefert die Funktion true und das entsprechende Element bleibt im Array enthalten.

AntwortenPositivNegativ

Über den Autor

Avatar AutorDer Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen | Nachricht

 

Ähnliche Themen

Wichtiger Hinweis

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.