Hello,
Das mess ich deutlich anders.
Wenn ich mit einem Array arbeite dass den String bereits enthält(!)
Wie leigt denn cer String in dem Array? Jedes Zeichen in einem anderen Element?
Ja, das hab ich mit str_split() gemacht; siehe unten.
Nicht mit array($str)... ;-)
Wir sprechen auch beide von PHP?
;-)
Siehe meine Daten zur Testumgebung.
und einem String dessen Länge bereits ermittelt wurde ist das Array ziemlich konstant 10% schneller _durchlaufen_.
Du meinst den sequenziellen Zugriff? Zeichen für zeichen der Reihe nach?
Also im gegenpart zum wahlfreien Zugriff?
Ja, das hat mich auch mehr als überrascht.
Über den Grund kann ich auch nur raetseln.
Billiger als ein mit O=const zu errechnendes Displacement kann ein Tree wohl kaum sein. Ich vermute dass es an der Allokation liegt.
Wenn man die Zeit zur Konvertierung _von_ einem String in ein Array
( mittles str_split() ) miteinrechnet stimmen Deine Zahlen.Nö sowas meinte ich nicht.
Zur Messung gehören natürlich nicht nur das sequenzielle Durchlaufen, sondern auch random Access und Kopieraktionen.
Hier ging's um den Vergleich mit foreach.
Das entspricht der Funktion eines einfachen Forward-Iterators.
Allerdings stellt sich die Frage ab wann diese Konvertierung dennoch rentiert wenn man das Array mehrfach durchläuft.
Das kann gerade bei sehr grossen Strings naturgemäss öfters Sinn machen.Und was ist mit rückwärts?
Kann ausser Ansatz bleiben, siehe vor. Abschnitt.
Nur als Zusatzfrage:
Und wie sieht es mit dem Speicherverbrauch aus?
Der ist zumindest grösser, genaue Zahlen wird der/die FragestellerIn wohl sowieeo selbst ermitteln ( müssen),
Harzliche Grüße vom Berg
http://www.annerschbarrich.deTom
Grüssse
hkl