Aloha ;)
Kann das mal jemand prüfen? Dem Ergebnis nach ist der Test mit foreach und einem Komplettdurchlauf ca. 3 bis 4 mal schneller als 3 Zugriffe auf das Array mit 4300 Elementen. Ach wenn ich den Wertebereich um den Faktor 100 erhöht (und die "Vorwahl" verlängert) habe war das Ergebnis ähnlich.
Wenn ich das auf meinem billigen Webspace laufen lass ergibt sich (grob) das gleiche Bild.
ForEach-Zugriff: 1199.8353004456ms
gefunden: dummy: 015299
1000000
Array-Zugriff : 2682.8827857971ms
gefunden: dummy: 015299
1000000
Das legt nahe, dass Arrays von PHP noch einmal deutlich komplexer behandelt werden als ich bisher angenommen hatte - inklusive entsprechender nativer Optimierungen.
Es scheint, dass der Overhead eines einzelnen Arrayzugriffs per Schlüssel sehr viel größer ist als der Gesamtaufwand eines sequentiellen Durchlaufens.
Das legt nahe, dass auch Gunnars Datenstruktur u.U. vergleichsweise deutlich langsamer laufen könnte als angenommen, da hier auch einige Arrayzugriffe anhand eines Schlüssels erfolgen (der dann zwar eine Zahl ist, aber, naja...).
In anderen Sprachen kann das durchaus anders aussehen - z.B. in Javascript, wo Arrays schlank sind und keine assoziativen Arrays möglich sind, da dürfte ein Zugriff über eine Baumstruktur deutlich schneller sein als ein Durchlaufen des Arrays. Noch krassere Erleichterungen durch die Baumstruktur / binäre Suche erwarte ich bei Sprachen wie Java oder C/C++, die noch weniger abstrahieren und damit transparente, abschätzbare Speicherverwaltung betreiben.
Mein Fazit: Optimierungsversuche über Datenstrukturen (egal ob Baumstruktur oder binäre Suche) sind in PHP aufgrund des hohen Abstraktionsniveaus Makulatur.
Grüße,
RIDER
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[