+ Antworten
Ergebnis 1 bis 13 von 13

Thema: schnittmenge von 2 arrays aus dem einen löschen

  1. #1
    TP-Senior jackie_o macht alles soweit korrekt
    Registriert seit
    Nov 2004
    Beiträge
    135

    schnittmenge von 2 arrays aus dem einen löschen

    Hallo, hab nochmal so'n schwer zu beschreibendes Problem...

    Habe 2 zweidimensonale Arrays und möchte die einzelnen Einträge miteinander verbinden, so ala Tischtennisturnier "jeder mit jedem".
    Wenn die Einträge nur in Array1 oder Array2 sind ist alles ok, dann krieg ich das mit zwei verschachtelten for-Schleifen hin.

    Nur, wenn nicht, wie krieg ich dann die Duplikate raus? Schnittmenge bilden und die gefundenen aus dem einen Array löschen? Nur wie?
    Schnittmenge hab ich schonmal dies gefunden:
    PHP-Code:
    $result array_intersect($arr1$arr2); 
    Nur wie krieg ichs gelöscht, kenne bisher nur slice und pop...

    Wär toll, wenn mir noch mal jemand auf die Sprünge helfen könnte.

    Viele Grüße
    Jackie

  2. #2
    TP-Junior magadoo macht alles soweit korrekt
    Registriert seit
    Oct 2004
    Beiträge
    17
    Hmm, weiss zwar nicht ob das so klappt, aber du könntest ja versuchen die beiden arrays mit array_merge() zusammenführen und dann per array_unique() die doppelten Einträge entfernen.

  3. #3
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    Das mit den doppelten Einträgen ist so eine Sache, vor Ewigkeiten hab ich mal so ein Lottozahlen Script gebastelt, 6 aus 49, vom Grundproblem her ist es ähnlich, ich checke einfach, ob das Ergebnis im Ergebnis array schon drin ist doer nicht, wenn ja dann zieh ich halt nochmal.

    Vielleicht nutzt es dir ein wenig,

    so long,

    skip

    PHP-Code:
    session_start();
    include(
    "datnebankverbindungsgedoense.php");
        
    $query "Select count(*) from gewinner";
        
    $result mysql_query($query);
        
    $anzahl mysql_result($result,0);
        
    $alle_nehmen "Select spieler_id from gewinner";
        
    $alle_kriegen mysql_query($alle_nehmen);

    function 
    zufalls_zahlen($n$x$y) {
        
    // n Zahlen aus dem Bereich x bis y
        
    mt_srand((double)microtime()*1000000);
        
    $pool range($x$y);
        for(
    $i=0$i<$n$i++) {
            
    $number mt_rand($x$y);
            while(!
    in_array($number$pool)) {    
                
    $number mt_rand($x$y);
            }
            
    $ergebnis[] = $number;
            list(
    $key) = array_keys($pool$number);
            unset(
    $pool[$key]);
        }
        return 
    $ergebnis;
    }
    if(
    $gewinner<$anzahl){
    $lottozahlen zufalls_zahlen($gewinner1$anzahl);
    shuffle($lottozahlen); 
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  4. #4
    TP-Senior jackie_o macht alles soweit korrekt
    Registriert seit
    Nov 2004
    Beiträge
    135
    @magadoo:
    hmmm... und wie mach mit dem einen Array dann das "jeder mit jedem"?
    Geändert von jackie_o (21.03.2005 um 15:42 Uhr)

  5. #5
    TP-Junior magadoo macht alles soweit korrekt
    Registriert seit
    Oct 2004
    Beiträge
    17
    Tja, das ist die andere Frage

    Aber du könntest ja wie du selber gesagt hast, mit zwei Schleifen beide arrays verknüpfen und vor jedem Durchlauf den behandelten Eintrag aus dem zweiten array löschen

  6. #6
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    Eben,

    schau dir das mal in Ruhe an. Die Idee ist ja die gleiche,

    unset($pool[$key]);

    Ein korrekt gezogener Wert wird aus dem "pool" der zu verarbeitenden Zahlen gezogen, der pool ist quasi die große Kugel, in der die Lottokugeln rumeinern, wenn eine gezogen ist, ist sie nicht mehr drin..........

    So machst du das , mit deinen Tischtennis - Spielern auch und schon sind Doppelziehungen nicht mehr möglich.

    so long,

    skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  7. #7
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    Ach ja,

    jeder mit jedem.

    Anzahl der Begegnungen bei n Spielern = n x (n-1)

    also 10 Spieler, jeder kann gegen 9 andere spielen, macht 90 Spiele.

    20 Spieler, jeder 19 Begegnungen, 380 Spiele, das wäre ein verdammt langes Turnier

    so long,

    skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  8. #8
    TP-Senior jackie_o macht alles soweit korrekt
    Registriert seit
    Nov 2004
    Beiträge
    135
    @skipperjan: danke für deine posts, aber ich krieg dein Beispiel leider nicht so ganz mit meinem "problem" zusammen.

    in meinem Fall ist es so, dass ein benutzer mittels zweier input-felder, was aus der DB holt. Die Ergebnisse aus input_a kommen in Array_a, die Ergebnisse aus input_b in Array_b. Und davon soll dann jeder aus Array_a mit jedem aus Array_b. (Sind nicht so viele, max. 5 pro Array).

    Gleiche Eingaben werden rausgefiltert, aber da man nur (mind.) die ersten 3 zeichen eingeben muss, ergibt eine Eingabe von "joh" und "joha" doppelte in beiden Arrs. (z.B. a: johannes, johann, john b:johannes, johann).
    Das keiner mit sich selbst spielen muss hab ich geregelt.

    Nur das "johannes vs. johann" das gleiche ist wie "johann vs. johannes" und deshalb raus muss, krieg ich leider nicht hin.

    Also wenn da noch jemand ne Idee hat...

    Falls nicht, is auch nicht soo schlimm, hat der user der so beknackte eingaben macht halt pech und muss sich die hälfte wegdenken [obwohl, schöner wärs anders schon ]

    Vielen Dank und Gruß
    Jackie

  9. #9
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Ich habe das mal für Snooker-Spiele realisiert, und da habe ich eine Tabelle benutzt, wo nur die Spieldaten drin sind:

    SpielID int 4 NOT NULL auto_increment NULL
    Datum date NOT NULL '0000-00-00' NULL
    Turnier int 4 NOT NULL '0' NULL
    Liga int 4 NOT NULL '0' NULL
    Tisch int 11 NOT NULL '0' NULL
    Spieler1 int 4 NULL NULL
    Spieler2 int 4 NULL NULL
    Punkte1 int 2 NOT NULL '0' NULL
    Punkte2 int 2 NOT NULL '0' NULL
    Highbreak1 int 4 NOT NULL '0' NULL
    Highbreak2 int 4 NOT NULL '0' NULL
    Modus int 2 NOT NULL '0' NULL
    d1 int 2 NOT NULL '0' NULL
    d2 int 2 NOT NULL '0' NULL

    d1 und d2 sind Ratings vor dem Spiel, um auch wieder den Zustand vor dem Spiel herstellen zu können.

    Anhand dieser Tabelle kann man mit geschickten SELECT sich alle erwünschten Infos rausziehen. Die Spielerdaten werden dann einfach per JOIN eingebunden.

    Ich habe seinerseits auch ziemlich lange fran rumgeknappst - das schlimmste war die Erstellung von Turnieren in Baumstruktur


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  10. #10
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    So wie ich Jackie jetzt verstehe, ist alles fertig, nur es fehlt dir ein Instrument, Dopplungen zu verhindern, wenn jemand in beide Felder das gleiche einträgt?

    War es dass?

    Nun, die Lösung ist, jemanden der bereits in array a drinsteht nicht mehr in array b reinzulassen. du kannst ja vo jedem Eintrag einfach prüfen, ob genau dieser Spieler schon in einem der arrays drinsteht.

    Dann brauchst du das später auch nicht rauszufiltern.

    Sind deine Spielergruppen eigentlich immer gleich groß? Es gibt ja drei Fälle zu berücksichtigen, a = b, a > b, a < b............

    so long,

    skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  11. #11
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Wenn man wie gesagt die SELECTs geschickt setzt, kann man doch schon viel Vorarbeit leisten. Dazu müsste man sehen, wie die Tabellen sind, die jetzige SQL-Abfrage und was genau drinmstehen soll.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  12. #12
    TP-Senior jackie_o macht alles soweit korrekt
    Registriert seit
    Nov 2004
    Beiträge
    135
    ja skipperjan sieht das schon ganz richtig

    gruppen können alle 3 fälle haben (a = b, a > b, a < b)

    beim einlesen der GET-variablen ins array_b vorher fragen, ob schon in array_b vorhanden klingt gut, muss ich mal probieren, ob ichs hinkriege

    @St@eff.en
    hab nur eine einzige tabelle mit allen "spielern", abgefragt wird nur input_a und input_b und dann sollen die entsprechenden Paare gebildet werden.

    Is eigentlich auch nur ein Experiment und das mit den Turnierspielern um das ganze etwas weniger abstarkt zu machen. Es geht aber nur um die Paarbildung.

    Vielleicht wird irgendwann mal ein Spiel draus, wenn ich groß bin

    Gruß Jackie

  13. #13
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    na dann kann ich nur sagen - viel Spass beim Zähneausbeissen

    Ich habe das seinerzeit so gelöst, das ich 2 mal dieselbe Tabelle geJOINt habe, sieht halt nicht sehr übersichtlich aus, aber erfüllte den Zweck

    SELECT snooker_spiele.SpielID, snooker_spiele.Datum, snooker_spiele.Turnier, snooker_spiele.Liga, snooker_user.username AS S1, snooker_user_1.username AS S2, snooker_spiele.Punkte1, snooker_spiele.Punkte2, snooker_spiele.HighBreak1, snooker_spiele.HighBreak2, snooker_spielmodi.Spielmodus, snooker_spiele.Spieler1, snooker_spiele.Spieler2 FROM ( snooker_spiele INNER JOIN snooker_user ON snooker_spiele.Spieler1 = snooker_user.UserID ) INNER JOIN snooker_user AS snooker_user_1 ON snooker_spiele.Spieler2 = snooker_user_1.UserID INNER JOIN snooker_spielmodi On snooker_spiele.Modus = snooker_spielmodi.SpielmodusID

    aber das sieht bei Dir sicher anders aus, vielleicht ist es ja einen Gedanken wert ...


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51