Die fehlenden Arrayfunktionen in PHP

PHP bietet einen riesigen Fundus an Array-Funktionen. Unter diesen 77 Funktionen1 fehlen kurioser Weise drei, die man eigentlich erwarten würde:

  • Einen Wert zu einem Array hinzufügen, wenn er noch nicht im Array vorhanden ist.
  • Einen Wert aus dem Array entfernen, sofern er vorhanden ist.
  • Prüfen ob zwei Arrays die gleichen Werte enthalten.

Einfügen eines Wertes

Am Einfachsten verhindert man doppelte Einträge, indem man den Wert gleichzeitig als Schlüssel verwendet. Manchmal kann es jedoch praktisch sein, mit Arrays ohne speziellen Index arbeiten zu können. Dies bietet sich beispielsweise an, wenn das Array über explode erzeugt wird. Um trotzdem einen Wert nur einmal in das Array einzufügen, kann man über array_diff zuerst prüfen, ob der Wert schon im Array vorkommt und nur die Differenz einfügen. Das klappt dann sogar, wenn mehr als ein Wert eingefügt werden soll.

function array_flag_add(&$flags, $flag)
{
	return array_merge(\$flags, array_diff(array(\$flag), \$flags));
}

Entfernen eines Wertes

Das Entfernen eines Wertes aus dem Array kann über array_diff erfolgen. Diese Funktion gibt die Werte zurück, welche im zweiten Array nicht vorhanden sind. Somit lassen sich einzelne Werte aus einem Array entfernen, indem der zweite Parameter nur den zu entfernenden Wert enthält.

function array_flag_remove(&\$flags, \$flag)
{
	return array_diff(\$flags, array(\$flag));
}

Vergleichen der Werte eines Arrays

Kompliziert wird das Vergleichen der Werte zweier Arrays dann, wenn beide Arrays Veränderungen aufweisen können oder wenn Werte ersetzt worden sein können. Dann genügt simples Abzählen nicht mehr. Möchte man eine Schleife zum Vergleichen der Werte vermeiden, kann folgende Funktion genutzt werden:

function array_compare(&\$array1, &\$array2)
{
	return (count(array_diff(\$array1, \$array2)) == 0) && (count(array_diff(\$array2, \$array1)) == 0);
}

Die Kurzschlussauswertung sorgt dafür, dass das zweite array_diff nur aufgerufen wird, wenn das erste keine Unterschiede gefunden hat.

  1. Gezählt am 25.05.2012 in der PHP-Referenz. Hierbei sind natürlich einige Aliase dabei, welche die selbe Funktion referenzieren. Aber es zeigt den Punkt.