Ein nicht fortlaufendes, nummerisches Array kann zu Problemen führen. Aber es gibt ein Mittel dagegen.
Unter Umständen kann es vorkommen, dass man ein kaputtes, numerisches Array hat. Kaputt deshalb, weil die Indizies nicht fortlaufend sind. Das kann insbesondere kritisch werden, wenn man über einen Schleifenzähler darauf zugreift.
Eine kleines Beispiel um das Ganze zu verdeutlichen:
Download Code!
// Kaputtes Array erzeugen
$foo[0] = 'bar';
$foo[1] = 'foobar';
$foo[3] = 'foofoo';
// Ausgabe zum test
// Schleife, welche auf das Array zugreift
// Erzeugt eine Warnung mit: Undefined offset: 2
for($i = 0, $size = count($foo); $i < $size; ++$i) { }
Ausgabe:
Array
(
[0] => bar
[1] => foobar
[3] => foofoo
)
bar
Undefined offset: 2
foobar
Fehlerhafte numerische Arrays erzeugen Probleme
In Java würde man eine ArrayOutOfBoundsExpcetion bekommen, diese wenn nicht abgefangen zum Programmabbruch führt. PHP ist da zwar tolleranter, doch ist eine Warnung "prinzipiell" auch ein Fehler - bei sauberer Programmierweise.
Auch gibt es bestimmt Situationen mit dem Dateisystem, oder einer Datenbank, wo solche Warnungen schnell zu grossen Problem führen können.
Array reparieren - array_values ist dein Freund
Um das Array wieder zu reparieren, kann man die Funktion array_values verwenden. Diese stellt das Array wieder mit korrektem numerischen Indizies her.
Download Code!
print_r($foo);
$foo = array_values($foo);
print_r($foo);
Ausgabe:
Array
(
[0] => bar
[1] => foobar
[3] => foofoo
)
Array
(
[0] => bar
[1] => foobar
[2] => foofoo
)