Patrick: Abgelich doppelter Einträge in einer Textdatei

Hallo,
ich habe eine Textdatei, die verschiedene Namen enthält, einige davon sind doppelt vorhanden. Wie kann ich es anstellen, dass ich beim Auslesen der Datei überprüfe welche Namen mehrfach vorhanden sind und diese nur einmal ausgebe?

Beispiel:

namen.txt
Peter
Paul
Peter
Monika
Peter

Diese Namen enthält die Textdatei:
Peter
Paul
Monika

Gruss

Patrick

  1. Hi Patrick,

    ich habe eine Textdatei, die verschiedene Namen enthält, einige davon sind doppelt vorhanden. Wie kann ich es anstellen, dass ich beim Auslesen der Datei überprüfe welche Namen mehrfach vorhanden sind und diese nur einmal ausgebe?

    Es gibt eine Möglichkeit, wenn du alle Namen in einem Array hast: Die Funktion mit der du arbeiten kannst heißt array_count_values(), siehe http://de.php.net/manual/de/function.array-count-values.php

    Beispiel:

    $namen = array("Peter","Susanne","Peter","Thomas","Thorsten","Thomas");
    $count = array_count_values($namen);

    Danach hast du jeden Namen als ein Schlüssel im Array $count
    Wenn du jetzt die Namen als Wert haben willst, müsste folgendes funktionieren:

    foreach($count as $key => $value)
    {
       $ausgabe[] = $key;
    }

    Dann hast du im array $ausgabe alle Namen einmal drin.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
    Zufällige Hinweise:
    ------------------------
    Fuer die Neulinge: Auf viele Fragen findet man eine
    Antwort im </archiv/>, das man auch durchsuchen kann
    http://suche.de.selfhtml.org/
    1. Hi,

      Wenn du jetzt die Namen als Wert haben willst, müsste folgendes funktionieren:

      foreach($count as $key => $value)
      {
         $ausgabe[] = $key;
      }

      Dann hast du im array $ausgabe alle Namen einmal drin.

      nicht ganz, dein Array $ausgabe sieht dann so aus:

      Array
      (
          [0] => Peter
          [1] => Susanne
          [2] => Peter
      )

      denn array_count_values() tut das, was der Name sagt: es gibt die Anzahl der Werte zurück, womit dein Array $count so aussieht:

      Array
      (
          [Peter] => 2
          [Susanne] => 1
          [Thomas] => 2
      )

      wenn man alle Namen in einem Array hat, bietet sich die Funktion array_unique() an, um die doppelten Einträge zu löschen (siehe http://de.php.net/manual/de/function.array-unique.php).

      Gruß,
      Andreas.

      1. Hi Andreas,

        Dann hast du im array $ausgabe alle Namen einmal drin.

        nicht ganz, dein Array $ausgabe sieht dann so aus:

        Array
        (
            [0] => Peter
            [1] => Susanne
            [2] => Peter
        )

        Ähm, eigentlich nicht. Folgender PHP Code hat bei mir das getan was er sollte:

        $namen = array("Peter","Susanne","Peter","Thomas","Thorsten","Thomas");
        $count = array_count_values($namen);
        foreach($count as $key => $value)
        {
           $ausgabe[] = $key;
        }
        echo "<pre>"; print_r($ausgabe); echo "</pre>";

        Ausgabe:

        Array
        (
            [0] => Peter
            [1] => Susanne
            [2] => Thomas
            [3] => Thorsten
        )

        Und da ist sauber jeder Name einmal drin. Ich weiß nicht, wo da ein Fehler liegen sollte?

        denn array_count_values() tut das, was der Name sagt: es gibt die Anzahl der Werte zurück, womit dein Array $count so aussieht:

        Array
        (
            [Peter] => 2
            [Susanne] => 1
            [Thomas] => 2
        )

        Richtig, und da habe ich mittels einer foreach Schleife jeden key - also jeden Namen - in ein neues Array geschrieben.

        wenn man alle Namen in einem Array hat, bietet sich die Funktion array_unique() an, um die doppelten Einträge zu löschen (siehe http://de.php.net/manual/de/function.array-unique.php).

        Gut, nach der Funktion hatte ich eigenltich auch gesucht. Aber da ich an den Namen der Funktion nicht mehr erinnern konnte war ich mir nicht mehr sicher, ob diese funktion überhaupt exisitert auch wenn ich meinte, schon mal was davon gelesen zu haben.

        So geht es natürlich auch - und vor allem auch etwas einfacher ;-)

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        Zufällige Hinweise:
        ------------------------
        [remote-signature:http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php]
        1. Hi Dennis,

          Und da ist sauber jeder Name einmal drin. Ich weiß nicht, wo da ein Fehler liegen sollte?

          ich auch nicht ;-)

          Array
          (
              [Peter] => 2
              [Susanne] => 1
              [Thomas] => 2
          )

          Richtig, und da habe ich mittels einer foreach Schleife jeden key - also jeden Namen - in ein neues Array geschrieben.

          ja - da hab ich nicht genau genug hingesehen. Das ist natürlich völlig korrekt. Sorry!

          Gruß,
          Andreas.

          1. Hi Andreas,

            Und da ist sauber jeder Name einmal drin. Ich weiß nicht, wo da ein Fehler liegen sollte?

            ich auch nicht ;-)

            *LOL*

            ja - da hab ich nicht genau genug hingesehen. Das ist natürlich völlig korrekt. Sorry!

            Achso, na ja dann - aber trotzdem gut, dass du noch auf die schnellere Methode hingewiesen hast. Thx.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Zufällige Hinweise:
            ------------------------
            Meine Homepage: http://www.riehle-web.com
            Tutorial: http://tutorial.riehle-web.com