1. array_filter()
Speziell zum Entfernen von bestimmten Werten aus einem Array wurde array_filter($array, $callback) entwickelt. Diese Funktion iteriert über alle Werte in $array und wendet $callback auf jedes Element an. Gibt nun die Callback-Funktion für den Wert (bool)false zurück, dann wird dieser aus dem Ergebnisarray entfernt. Analog wird er übernommen, falls die Funktion (bool)true zurückgibt. Im nachfolgenden Beispiel sollen NULL, (bool)false und "" (leerer String) aus einem Array entfernt werden. Daher gibt die Callback-Funktion nur dann true zurück, wenn der aktuelle Wert keiner von den drei zuvor genannten ist.
<?php $arr = array(1, 2, null, 3, false, 4, 5, '', 6); $arr = array_filter($arr, function($val) { return ($val!==null && $val!==false && $val!==''); }); print_r($arr); ?>
Array ( [0] => 1 [1] => 2 [3] => 3 [5] => 4 [6] => 5 [8] => 6 )
2. array_diff()
Mit array_diff($array1, $array2) können alle Werte aus $array1 entfernt werden, die auch in $array2 enthalten sind. Entsprechend muss $array2 nur richtig definiert sein, um NULL-ähnliche Werte aus $array1 zu löschen.
<?php $arr = array(1, 2, null, 3, false, 4, 5, '', 6); $remove = array(null, false, ''); $arr = array_diff($arr, $remove); print_r($arr); ?>
Array ( [0] => 1 [1] => 2 [3] => 3 [5] => 4 [6] => 5 [8] => 6 )
array_diff() löscht nicht nur dann, wenn ein Wert aus $array1 exakt identisch mit einem aus $array2 ist, sondern auch dann wenn deren String-Repräsentation identisch ist. Also wenn gilt (string)$wertAusArray1 === (string)$wertAusArray2. Daher kann es vorkommen, dass array_diff() toleranter löscht als es gewünscht ist. Im nächsten Beispiel etwa soll nur NULL entfernt werden, tatsächlich löscht die Funktion aber auch alle Elemente mit Wert (bool)false oder "" (leerer String):
<?php $arr = array(1, 2, null, 3, false, 4, 5, '', 6); $remove = array(null); $arr = array_diff($arr, $remove); print_r($arr); ?>
Array ( [0] => 1 [1] => 2 [3] => 3 [5] => 4 [6] => 5 [8] => 6 )
3. foreach-Schleife
Neben der Verwendung der bereits vorgestellten Funktionen kann natürlich auch eine normale foreach-Schleife genutzt werden. Diese muss über alle Werte im Array iterieren, für jeden prüfen, ob er erlaubt ist und ihn gegebenenfalls in ein zweites Array übernehmen.
<?php $arr = array(1, 2, null, 3, false, 4, 5, '', 6); $arr2 = array(); foreach ($arr as $val) { if ($val!==null && $val!==false && $val!=='') { $arr2[] = $val; } } print_r($arr2); ?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )