Objekt nur aus zweiter Liste löschen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
bestimmten eintrag
code
eintrag
element
folgenden prozess
funktion
http
index
item
kopieren
liste
listen
manual
objekt
referenz
schleife
test
url
verbindung
-
Hi, ich habe 3 Listen mit tweilweise den selben Objekten. Es handelt sich bei den Listen um Arrays. In der ersten Liste stehen alle Objekte. Teilweise werden diese der 2 Liste hinzu gefügt, aber so, dass alle Änderungen überall gültig werden. Also nicht mit
sondern mit=
Aus der zweiten Liste werden manche der dritten Liste hinzu gefügt. Wird ein Objekt in die 3. Liste aufgenommen, so soll es aus der 2. Liste entfernt werden. Es steht also nurnoch in der 1. und der 3. Liste. Wie bekomme ich es hin, dass weiterhin in diesen Listen verfügbar bleibt, aber trotzdem aus der 2. entfernt wird?=&
Edit: Ich habe den Titel angepasst. Das Objekt soll logischer Weise aus der zweiten Liste entfernt werden, da in der ersten ja alle vorkommen.
Beitrag zuletzt geändert: 19.2.2010 16:01:56 von das-koenigreich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sorry, aber WTF? ^^
In PHP gibt es per se keine Listen, sondern Arrays. Diese Arrays haben Indices.
Mit "unset ()" kannst du einen bestimmten Eintrag im Array löschen oder mit den anderen Funktionen (siehe php.net).
Im Array kannst du sowohl nach dem Key (=Index) als auch nach dem Value (=Wert) suchen. -
Er meint Referenzen unter den Arrays.
Soll heissen
Liste1 --------- Item1 Item2 Item3 Liste2 --------- Item3 <-- Soll entfernt werden. Item4 Liste3 --------- Item3 Item5
Die einfachste Lösung dabei ist doch, dass du in Liste3 eine Referenz auf Item3 von Liste1 erstellst.
Also die Möglichkeit einer Verbindung zu allen Listen.
Dann entfernst du in Liste2 einfach die Referenz auf Item3. -
lucas9991 schrieb:
Ja, ich habe Arrays als Listen verwendet.
In PHP gibt es per se keine Listen, sondern Arrays. Diese Arrays haben Indices.
lucas9991 schrieb:
Toll, dann ist das Objekt aber auch in den anderen Listen weg.
Mit "unset ()" kannst du einen bestimmten Eintrag im Array löschen oder mit den anderen Funktionen (siehe php.net).
lucas9991 schrieb:
Und das bringt mir...
Im Array kannst du sowohl nach dem Key (=Index) als auch nach dem Value (=Wert) suchen.
rangmar schrieb:
Nein, nicht unter den Array, sondern unter den Elementen. Ich denke aber, du hast es richtig verstanden.
Er meint Referenzen unter den Arrays.
rangmar schrieb:
Genau dieses.
Soll heissen
Liste1 --------- Item1 Item2 Item3 Liste2 --------- Item3 <-- Soll entfernt werden. Item4 Liste3 --------- Item3 Item5
rangmar schrieb:
Also die Referenz besteht bereits. Die Objekte werden durch eine Schleife erstellt und in Liste eins gesammelt. Jedes Element bekommt ein anderes Objekt. Jetzt werden beispielsweise 5 Array-Elemente genommen und werden mit Referenzen auf ihre Herkunft in Liste 2 gepackt. (so weit bin ich) In einem danach folgenden Prozess will ich beispielsweise das Element, das in Liste 2 den Key 3 hat in Liste 3 packen, und den Eintrag aus Liste 2 löschen. Der Eintrag in Liste 3 soll jetzt eine Referenz auf den Eintrag in Liste 1 haben, welche die Objekte beinhaltet.
Die einfachste Lösung dabei ist doch, dass du in Liste3 eine Referenz auf Item3 von Liste1 erstellst.
Also die Möglichkeit einer Verbindung zu allen Listen.
Dann entfernst du in Liste2 einfach die Referenz auf Item3.
Wie mache ich das? -
Du darfst sonst gerne auch ein wenig Code schreiben.
Dann sehe ich, wie du es machst und kann dir sogar dementsprechend eine tolle Antwort geben. Vorausgesetzt ich verstehe es. :P (Aber davon gehe ich aus)
*Hust* aber moment mal..
Du hast am Anfang sagen wir 5 Items.
Alle die Items kommen in Liste 1.
Dann kannst du Items von Liste 1 nach Liste 2 verschieben.
Und von Liste 2 nach Liste 3.
Sehe ich das richtig?
Dann mach doch ein Hauptarray in das du alle Items stellst.
Und in die Listen schreibst du einfach eine Referenz zu den Items.
Wenn du nun von Liste 1 zu Liste 2 verschiebst, dann entfernst du die Referenz in Liste 1 und fügst sie zu Liste 2 hinzu.
Beitrag zuletzt geändert: 19.2.2010 17:01:24 von rangmar -
Liste 1 ist so zu sagen das Hauptarray. In ihr sollen immer alle Objekte aufgelistet sein. Wenn ich dir den Code schicken würde, den ich verwende, dann sorgt das nur für Verwirrung, da das eigentlich etwas ganz nebensächliches in einer großen Aktion ist. Daer habe ich den Code etwas gekürzt und verinfach: http://pastebin.de/4107
-
Bist du ganz sicher, dass das nicht funktioniert?..
Rein der Logik halber müsste es das nämlich :P
unset entfernt schliesslich nur die Referenz.
Wenn es bei dir nicht funktioniert muss wohl $x falsch sein.
Funktioniert bei mir jedenfalls.
class test { var $a; public function __construct($a) { $this->a = $a; } public function out() { return $this->a; } } $arr1 = array(); $arr2 = array(); $arr3 = array(); $arr1[] = new test(1); $arr1[] = new test(2); $arr1[] = new test(3); $arr1[] = new test(4); $arr1[] = new test(5); $arr2[] =& $arr1[2]; $arr3[] =& $arr1[2]; unset($arr2[2]); echo $arr1[2]->out();
Beitrag zuletzt geändert: 19.2.2010 17:43:26 von rangmar -
lucas9991 schrieb:
Toll, dann ist das Objekt aber auch in den anderen Listen weg.
Mit "unset ()" kannst du einen bestimmten Eintrag im Array löschen oder mit den anderen Funktionen (siehe php.net).
Du "unsettest" doch nicht das Objekt selber, sondern löscht nur den Zeiger darauf.
So lange noch ein Zeiger auf das Objekt existiert, existiert auch das Objekt selber noch.
lucas9991 schrieb:
Und das bringt mir...
Im Array kannst du sowohl nach dem Key (=Index) als auch nach dem Value (=Wert) suchen.
Wenn du weißt, welchen Eintrag du in Array 2 löschen willst, nimmst du die Referenz und suchst diese im dritten Array, oder halt umgekehrt und den Eintrag kannst du dann mittels unset o.ä. löschen.
rangmar schrieb:
Also die Referenz besteht bereits. Die Objekte werden durch eine Schleife erstellt und in Liste eins gesammelt. Jedes Element bekommt ein anderes Objekt. Jetzt werden beispielsweise 5 Array-Elemente genommen und werden mit Referenzen auf ihre Herkunft in Liste 2 gepackt. (so weit bin ich) In einem danach folgenden Prozess will ich beispielsweise das Element, das in Liste 2 den Key 3 hat in Liste 3 packen, und den Eintrag aus Liste 2 löschen. Der Eintrag in Liste 3 soll jetzt eine Referenz auf den Eintrag in Liste 1 haben, welche die Objekte beinhaltet.
Die einfachste Lösung dabei ist doch, dass du in Liste3 eine Referenz auf Item3 von Liste1 erstellst.
Also die Möglichkeit einer Verbindung zu allen Listen.
Dann entfernst du in Liste2 einfach die Referenz auf Item3.
Wie mache ich das?
Liste 1 erstellen.
Die Referenz eines Element x in Liste 2 kopieren.
Die Referenz des Elements x in Liste 3 kopieren.
Die Fereferenz des Elements x in Liste löschen.
Dabei kannst du dir aussuchen, ob du nun eindeutige IDs verwendest (ein Array muss nicht forlaufend durchnummeriert sein), oder nach dem Wert mit der gleichen Referenz suchst, oder dir die ID merkst von der jeweiligen Referenz merkst.
Beitrag zuletzt geändert: 19.2.2010 17:40:54 von lucas9991 -
Ihr habt recht! Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage