array rückwärts durchlaufen
sabine
- php
0 Tom0 c.k0 sabine0 Tom0 Andreas Schneider0 Tom0 Andreas Schneider0 Tom
Hallo,
ich hänge an einem problem und komme mit den array funktionen, die mir php bietet nicht weiter...
ich habe folgende array struktur (auszug):
[12] => array [0] = 3
[1] = 2
[13] => array [0] = 3
[1] = 1
[14] => array [0] = 3
[1] = 2
[15] => array [0] = 3
[1] = 2
[16] => array [0] = 3
[1] = 2
[17] => array [0] = 3
[1] = 2
ich habe zb. key [17] und möchte das array so lange rückwärts durchlaufen, bis array an stelle [$i][1] den wert "1" hat. das wäre in meinem beispiel bei key [13].
hat wer eine idee, wie ich das am besten mache?
danke
sabine
Hello,
hat wer eine idee, wie ich das am besten mache?
klar!
Arrays sind in PHP verkettete Listen und mehrdimensionale Arrays sind Baumstrukturen.
Wenn man ein Array also in der Richtung umkehrt (dafür gibt es eine spezielle Funktion) muss PHP nur die zwei Werte des Anfangs- und des Endeankers vertauschen. Da macht keinen Stress, auch wenn das Array ewig groß ist.
Deine Lösung heißt also:
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Benutz die Funktion array_reverse. Sie dreht ein array um.
Hier der Link in der Dokumentation:
http://de.php.net/manual/de/function.array-reverse.php
Hi!
danke für den vorschlag!
- Array umkehren (Reversieren)
- Array mit foreach() ablaufen
- in der foreach()-Schleife eine Trefferbedingung auswerten
- Bei Treffer die Schleife mit "break" abbrechen.
komme ich auch ohne array_reverse aus? kann ich nicht mit ner forschleife darübergehen und immer 1 subtrahieren, bis ich an der stelle bin, die meine abbruchbedingung darstellt?
danke!!!
sabine
Hello,
komme ich auch ohne array_reverse aus? kann ich nicht mit ner forschleife darübergehen und immer 1 subtrahieren, bis ich an der stelle bin, die meine abbruchbedingung darstellt?
Nein-nein-nein-vielleicht-j
Wenn Du genau weißt, wie die index Deiner Kette lauten, dann mag das gehen. Es muss aber nur einen zwischendurch fehlen, oder einer doppelt zu sein (auch das geht ggf.), dann gibt es Stress.
foreach() arbeitet die Kette "physisch" ab, also die Elmente in der reiehenfolge, in der sie verkettet sind. Der "Index" kann aber durchaus durchmischt sein in der Kette
a zu 1 % 33 ab 00 Werte, die im Arrayelement stehen
1--5--3--2--4--7--6 "Index", der auf dem Element aufgeprägt ist
0 1 2 3 4 5 6 Position des Elementes in der Kette
Man kan auch mit den Zeiger-Funktionen für das Array arbeiten:
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Sabine,
komme ich auch ohne array_reverse aus? kann ich nicht mit ner forschleife darübergehen und immer 1 subtrahieren, bis ich an der stelle bin, die meine abbruchbedingung darstellt?
ohne jetzt Ahnung von PHP zu haben, würde ich sagen: Ja das sollte gehen (allerdings darf, wie Tom schon richtig anmerkte, keins der Arrayelemente fehlen - wie ein Arrayelement doppelt belegt sein kann, muß er allerdings noch erklären), z.B. so:
for ($i=$startwert; $i>=$endewert; $i--) {
...
}
Grüße
Andreas
Hello,
ohne jetzt Ahnung von PHP zu haben, würde ich sagen: Ja das sollte gehen (allerdings darf, wie Tom schon richtig anmerkte, keins der Arrayelemente fehlen - wie ein Arrayelement doppelt belegt sein kann, muß er allerdings noch erklären), z.B. so:
Ob das noch geht, habe ich aktuell nicht ausprobiert.
Aber über die Einfügeoperationen konnte man ein Element mit einem "assoziativen Index" an einer bestimmten Position in der Kette einfügen, obwohl es an einer anderen Position mit diesem Index schon vorhanden war.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
Aber über die Einfügeoperationen konnte man ein Element mit einem "assoziativen Index" an einer bestimmten Position in der Kette einfügen, obwohl es an einer anderen Position mit diesem Index schon vorhanden war.
das widerspricht aber eigentlich der Definition eines Arrays, bei dem jedes Element durch seinen Index eindeutig identifiziert wird. Klingt für mich also eher wie ein Bug in der Array-Implementierung.
Grüße
Andreas
Hello,
Aber über die Einfügeoperationen konnte man ein Element mit einem "assoziativen Index" an einer bestimmten Position in der Kette einfügen, obwohl es an einer anderen Position mit diesem Index schon vorhanden war.
das widerspricht aber eigentlich der Definition eines Arrays, bei dem jedes Element durch seinen Index eindeutig identifiziert wird. Klingt für mich also eher wie ein Bug in der Array-Implementierung.
Das liegt (lag) sicherlich daran, dass PHP-Arrays keine geschlossenen (statischen) Strukturen sind, sondern dynamische Speicherstrukturen darstellen, eben eine Kette oder einen Baum aus vielen Elementen darstellen. Der "Index" ist nichts anderes, als ein "Datenfeld" auf dem Element und hat nichts mit der Position in der Struktur zu tun. Da könnte also bei einem "Bug" schon leicht einer Doublette auftreten.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom