phpbar.de logo

Mailinglisten-Archive

[php] Indiziertes Array !

[php] Indiziertes Array !

Matthias Pigulla mp_(at)_webfactory.de
Sun, 16 May 1999 22:48:44 +0200


Norbert Pfeiffer wrote:
> siehste - genau das ist DIE Frage - klaere ich heute abend noch...
Dann nimm noch "meine" Version; sooo viele Wege gibt's nicht, also sieht
sie Egons Ansatz ähnlich, nur daß sie sich - wenn wir eh' schon each()
aufrufen - die Referenz ins Array bei der Summe spart.

while (list($i, $v) = each($feld)) $summe += $v;


[offtopic]
> Nur mal so am Rande.
> Unter 'C' und Artverwandten ist die FOR-Schleife das Schnellste,
> weil der Zaehler explizit vorgegeben wird, bei WHILE muss immer
> auf das Array-Ende getestet werden.

Moment, ich weiß nicht, ob man das so pauschal sagen kann, es hängt
sicher stark vom Kontext ab und wie man das Problem überhaupt angeht.
Ich denke mal, daß while() und for() intern recht ähnlich aufgebaut
sind, und K&R sagen da ja auch nichts zu.

Hier ist eine schnelle Lösung, und sie läuft ohne for ;-) 

for() wäre praktisch identisch; ich habe auch eine Zähler p, muß den
initalisieren, am Schleifenende vergleichen, und den Summen- und
Schleifenzähler erhöhen. Nur, daß der Pointer *p bei großen Datentypen
kompakter sein dürfte. Außerdem spart er mir bei der Referenz die Summe,
die ich bei Feld + p hätte (ist ja *p). Genug für die Liste ;-)

<ACHTUNG C-Code ;-)>
	int feld[] = { 2, 4, 6, 7}, summe = 0;
	int *p = feld + sizeof(feld) / sizeof(feld[0]);
	while (p > feld) summe += *p--;
</ACHTUNG>

> Das  $summe = 0; ist in einem 'GradeausCode' ueberfluessig.
> Bei einer uebergeordneten Schleife jedoch zwingend erforderlich.
> Also schreibe ich sowas immer hin, fuer 'spaeter'  ;-)

Gute Angewohnheit ;-). Dann solltest Du vorher ein reset($feld) nicht
vergessen, falls Du vorher schon mal über das Feld iteriert hast.

Matthias
-- 
   w e b f a c t o r y | matthias pigulla
      www.webfactory.de  mp_(at)_webfactory.de


php::bar PHP Wiki   -   Listenarchive