Mailinglisten-Archive |
Hi Christian, laß' mal einen Bonner PHP-Stammtisch initiieren ;-) Also, testweise: <?php $test[christian] = "foobar"; $test[0] = "snfau"; while ($p = each($test)) print "$p[0]/$p[key] : $p[1]/$p[value]\n"; ?> Ein wenig unerwartet ist die Augabe: christian/christian : foobar/foobar 0/0 : snfau/snfau Das läßt mich vermuten, daß PHP indizierte und assoziative Arrays in einen Topf schmeißt, also das eine Zahl intern genau so behandelt wird wie ein assoziativer Name. > $row = mysql_fetch_array($result); > $row[0] = 0; ...verändert also nicht den Array-Inhalt mit Index 0, sondern den assoziativen Namen "0" - und dabei entsteht ein neuer Eintrag. Bestimmt ist sizeof($row) nach der zweiten Anweisung eins größer als vorher. Solange man die Arrays nur über Indizes bearbeitet, hat man keine Probleme damit, daß die Indizes Namen sind. Kompliziert wird es dann, wenn man Indizes und Namen (absichtlich) mischen will. Ich hatte vor längerer Zeit mal die Frage gestellt, ob es Performancevorteile bringt, nur mit Indizes zu arbeiten, weil PHP damit die Arrays direkter referenzieren könnte; außerdem war ich besorgt, die Verwendung von großen Indizes würde dann große Arrays inplizieren. (Ich denke so, weil ich aus dem C-Lager komme :-) Mit einem Index kann ich die Speicheradresse direkt ansprechen, einen Namen müßte man erst hashen.) Diese Bedenken zerstreuen sich damit also. Ein Index ist genauso/genausowenig performant wie ein assoziativer Name (wenn man mal den minimalen Unterschied außer Betracht läßt, daß ein längerer Name mehr Instruktionen braucht, um gehast zu werden ;-) Ein Array ist damit immer nur so groß, wie es Elemente beinhaltet. Kann sein daß ich mich ziemlich aufs Glatteis begeben habe; ich bin mit dem PHP-Code aber noch nicht so vertraut, daß ich mal schnell nachschauen könnte ;-) Vielleicht kann Egon mich bestätigen? Matthias -- w e b f a c t o r y | matthias pigulla am wichelshof 10 fon 0228-9636949 53111 bonn fax 0228- 655656 www.webfactory.de mp_(at)_webfactory.de
php::bar PHP Wiki - Listenarchive