Hallo!
Es könnte ja vor dem Start der Schleife ein Element entfernt (unset()) worden sein.
Aber ich lasse doch die Schleifenabbruchbedingung mit count() ermitteln. Wenn vorher ein Element entfernt wurde, muss das doch automatisch dekrementiert werden, oder?
Ja, aber der Index wird nicht angepasst. Wenn Du einen Array hast
$demo = array( 0 => 'a', 1 => 'b', 2 => 'c');
und dann
unset($demo[1]);
hast Du am Ende folgendes im Array stehen:
array( 0 => 'a', 2 => 'c');
Wenn Du jetzt eine Schleife mit count() in der Abbruchbedingung verwendest, ergibt count($demo) ja 2, entsprechend würde nur $demo[0], und $demo[1] (welches ja nicht mehr existiert) erreicht, $demo[2] wird dagegen nicht mehr bearbeitet.
Wenn Du danach array_values() verwendest, hättest Du
array( 0 => 'a', 1 => 'c');
Ist aber unnötig eben weil es ja foreach gibt ;-)
btw. count() ist zwar ein Overhead weil es ein Funktionsaufruf ist, und nicht einfach nur aus einer Variable gelesen wird, trotzdem ist es derselbe Algorithmus, da count nicht jedesmal die Elemente zählt, sondern den Counter den der ZVAL Array mitführt, direkt abfragt.
Grüße
Andreas
SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/