Rolf B: csv Datei von Duplikaten befreien / Neue Frage und Antwort

Beitrag lesen

Hallo Pit,

nein, nicht sehr viel. Die Array-Hierarchie sinkt um eine Stufe, d.h. die Abfragen beim Aufbau werden etwas einfacher, und beim Auslesen ist ein foreach weniger.

D.h. statt 23 Codezeilen sind's dann 18 oder so.

Das unsympathische an der SQL Lösung ist für mich, dass Du Daten erstmal rausschreibst, um sie extern zu überarbeiten. Dann importierst Du sie wieder. Es stellt sich nun heraus, dass die Überarbeitung eigentlich ganz einfach ist, man muss nur das Problem lösen, die Sätze mit gleichem Key zusammen zu bekommen.

Dafür gibt's auch andere Möglichkeiten wie eine Array-Hierarchie, aber die sind eher komplizierter.

Nur Mut! 😉

Das $rowDict Array würde für meine Beispieldaten von oben so aussehen (ich zeige für die Rows nur feld4, sonst wird's für das Forum zu breit). Für die Keys 4, 9 würde array_unique eine Identität erkennen und der Satz würde importiert werden.

$rowDict = ARRAY(
   4 => ARRAY(
           9 => ARRAY(
                    ARRAY(.... "feld4" => "Foo"),
                    ARRAY(.... "feld4" => "Foo")
                )
        ),
   5 => ARRAY(
           2 => ARRAY(
                    ARRAY(.... "feld4" => "Dings"),
                    ARRAY(.... "feld4" => "Pings")
                )
        ),
   7 => ARRAY(
           8 => ARRAY(
                    ARRAY(.... "feld4" => "Mumpf"),
                )
        )
);

Lässt Du feld2 oder feld3 weg, hat diese Hierarchie eine Stufe weniger.

Sind feld2 und feld3 beides Strings, könntest Du auch einen kombinierten Schlüssel machen, sowas wie $feld2."~".$feld3, und den als Key für das Dictionary nutzen. Dann hast Du eine Hierarchiestufe weniger, aber kannst trotzdem beide Schlüssel verwenden. Der Aufbau des Dictionary sieht dann so aus (da Du ein Freund von ARRAY() statt [] zu sein scheinst, habe ich das mal verwendet):

$rowDict = ARRAY();

foreach ($data as $row) {
   $key = $row["feld2"] . "~" . $row["feld3"];  // Schlüssel der Row

   // Noch kein Eintrag zum $key -> Neues Subarray anlegen
   // Andernfalls an's vorhandene Subarray anhängen.
   if (empty($rowDict[$key])) {
      $rowDict[$key] = ARRAY( $key => $row);
   }   
   else {
      $rowDict[$key][] = $row;
   }   
}

Bei der Auswertung entfällt dann eine der geschachtelten foreach-Schleifen.

Rolf

--
sumpsi - posui - clusi
0 100

csv Datei von Duplikaten befreien

Pit
  • php
  1. 0
    Auge
    1. 0
      Pit
      1. 0
        Der Martin
  2. 0
    MudGuard
    1. 0
      Pit
  3. 0

    Kommt drauf an...

    Raktenwissenschaftler
    1. 0
      Raketenwissenschaftler
  4. 0

    csv Datei von Duplikaten befreien / Neue Frage

    Pit
    1. 0
      Pit
      1. 0
        Raketenwissenschaftler
        1. 0
          Raketenwissenschaftler
          • sql
        2. 0
          Tabellenkalk
        3. 0
          Rolf B
          1. 0
            Raketenwissenschaftler
          2. 0
            Pit
            • danke
            • php
            1. 0
              Rolf B
              1. 0
                Pit
                1. 0
                  Rolf B
                  1. 0
                    Pit
                    1. 0
                      Rolf B
                      1. 0
                        Pit
                        1. 0
                          Rolf B
                          1. 0
                            Pit
                            1. 0

                              csv Datei von Duplikaten befreien / Neue Frage und Antwort

                              Pit
                              1. 0
                                Rolf B
                                1. 0
                                  Pit
                                  1. 0
                                    Pit
                                    1. 1
                                      Rolf B
                                      1. 0
                                        Pit
                                        1. 0
                                          Rolf B
                                          1. 0
                                            Pit
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                            2. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    Pit
                                                    1. 0
                                                      Pit
                                                      1. 0
                                                        Raketenwissenschaftler
                                                        1. 0
                                                          Pit
                                                          1. 0
                                                            Raketenwissenschaftler
                                                            1. 0
                                                              Pit
                                                            2. 0
                                                              Rolf B
                                                              1. 0
                                                                Pit
                                                                1. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    Matthias Apsel
                                                                    1. 0
                                                                      Tabellenkalk
                                                                      1. 0
                                                                        MudGuard
                                                                    2. 0
                                                                      Rolf B
                                                                  2. 0
                                                                    Pit
                                                          2. 1
                                                            Felix Riesterer
                                                            • php
                                                            1. 0
                                                              Pit
                                                              1. 0
                                                                Felix Riesterer
                                                                1. 0
                                                                  Pit
                                                                  1. 1

                                                                    NoSQL?

                                                                    Raketenwissenschaftler
                                                                    1. 0

                                                                      NoSQL? (Korrektur)

                                                                      Raketenwissenschaftler
    2. 0
      Raketenwissenschaftler
      1. 0
        Pit
        1. 0
          Raketenwissenschaftler
      2. 0
        Raketenwissenschaftler
    3. 0
      Felix Riesterer
      1. 0
        Pit
        1. 0
          Tabellenkalk
          1. 3
            Raketenwissenschaftler
            1. 2
              Tabellenkalk
        2. 0
          Felix Riesterer
          1. 0
            Pit
    4. 0
      pl
  5. 1

    Kritik an Deinem Umgang mit Hilfe

    Felix Riesterer
    1. 3
      Pit
      1. 1
        Der Martin
        1. 0
          pl
          1. 0
            Tabellenkalk
            1. 0
              Der Martin
            2. 0
              pl
        2. 0

          Zeilenumbruch in einem CSV-Feld

          Linuchs
          • programmiertechnik
          1. 0
            MudGuard
          2. 0
            Der Martin
            1. 0
              Rolf B
              1. 0
                Der Martin
          3. 0
            pl
            1. 0
              Felix Riesterer
              1. 0
                pl
              2. 0
                pl
              3. 1
                Christian Kruse
                1. 0
                  Rolf B
                  1. 0
                    Christian Kruse
                    1. 0
                      Der Martin
                      1. 0
                        Christian Kruse
                        1. 0
                          Der Martin
                    2. 0
                      Rolf B
                      1. 0
                        Christian Kruse
            2. 0
              Rolf B
              1. 0

                Zeilenumbruch in einer textarea

                pl
      2. 0
        Felix Riesterer
      3. 0
        Rolf B
      4. 0
        pl
        1. 0
          pl
      5. 0
        Raketenwissenschaftler