kostenloser Webspace werbefrei: lima-city


Objekt nur aus zweiter Liste löschen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. 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.
  5. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    lucas9991 schrieb:
    In PHP gibt es per se keine Listen, sondern Arrays. Diese Arrays haben Indices.
    Ja, ich habe Arrays als Listen verwendet.


    lucas9991 schrieb:
    Mit "unset ()" kannst du einen bestimmten Eintrag im Array löschen oder mit den anderen Funktionen (siehe php.net).
    Toll, dann ist das Objekt aber auch in den anderen Listen weg.


    lucas9991 schrieb:
    Im Array kannst du sowohl nach dem Key (=Index) als auch nach dem Value (=Wert) suchen.
    Und das bringt mir... :confused:




    rangmar schrieb:
    Er meint Referenzen unter den Arrays.
    Nein, nicht unter den Array, sondern unter den Elementen. Ich denke aber, du hast es richtig verstanden.


    rangmar schrieb:
    Soll heissen
    Liste1
    ---------
    Item1
    Item2
    Item3
    
    Liste2
    ---------
    Item3 <-- Soll entfernt werden.
    Item4
    
    Liste3
    ---------
    Item3
    Item5
    Genau dieses.



    rangmar schrieb:
    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.
    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.

    Wie mache ich das?
  6. 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
  7. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    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
  8. 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

  9. lucas9991 schrieb:
    Mit "unset ()" kannst du einen bestimmten Eintrag im Array löschen oder mit den anderen Funktionen (siehe php.net).
    Toll, dann ist das Objekt aber auch in den anderen Listen weg.

    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:
    Im Array kannst du sowohl nach dem Key (=Index) als auch nach dem Value (=Wert) suchen.
    Und das bringt mir... :confused:

    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:
    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.
    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.

    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
  10. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Ihr habt recht! Danke!
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!