phpbar.de logo

Mailinglisten-Archive

[php] $row[0] und $row[name]...

[php] $row[0] und $row[name]...

Matthias Pigulla mp_(at)_webfactory.de
Sun, 16 May 1999 15:18:25 +0200


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