[php] Wie kann man ein Element aus einem Array löschen und dabei den Array-Index neu erzeugen lassen?

Die erste natürliche Überlegung eines Entwicklers, wenn er ein Element aus einem Array löschen möchte, wird folgenden Ansatz hervorbringen:

unset($array[$key]);

Das funktioniert soweit auch wunderbar – es sei denn, man verwendet einen numerischen Index. Ein Beispiel:

$array = array(
    0=>'Apfel',
    1=>'Banane',
    2=>'Birne'
);
unset($array[1]);
/* ergibt:
$array = array(
    0=>'Apfel',
    2=>'Birne'
); */

Soweit verhält sich php hier natürlich völlig korrekt, allerdings möchte man in der einen oder anderen Situation einen durchgängigen Array Index haben – auch, wenn sich der Inhalt des Arrays ändert. Um dies zu erreichen, verwendet man nicht unset, sondern array_splice. Und das geht so:

array_splice($array, $key, $length);

Im Beispiel sieht es dann so aus:

$array = array(
    0=>'Apfel',
    1=>'Banane',
    2=>'Birne'
);
array_splice($array, 1, 1);
/* ergibt:
$array = array(
    0=>'Apfel',
    1=>'Birne'
); */

[Update]
Fälschlicherweise hatte ich array_values() übersehen. Ihr habt also auch diese Möglichkeit:

$array = array(
    0=>'Apfel',
    1=>'Banane',
    2=>'Birne'
);
unset($array[1]);
$array = array_values($array);
/* ergibt:
$array = array(
    0=>'Apfel',
    1=>'Birne'
); */

Vielen Dank an Patrick für den Hinweis 😉