Prüfen auf doppelte Werte in einem Array

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen auf doppelte Werte in einem Array

    Hallo,

    mit array_unique() kann man ja doppelte Werte in einem Array entfernen. Als Rückgabewert bekommt man einen "bereinigten" Array. Ich würde aber nun gerne abfragen, ob etwas geändert wurde, oder anders ausgedrückt: Ich würde gerne prüfen, ob ein Array identische Werte beinhaltet.

    Beispiel, mein Array sieht so aus:
    Code:
    Array
    (
        [0] => [url]www.google.de[/url]
        [1] => [url]www.msn.com[/url]
        [2] => [url]www.google.de[/url]
    )
    google.de kommt ja doppelt vor. Wie kann ich das abfragen? Irgendwie stehe ich auf dem Schlauch. Ich könnte zwar den Original-Array und den Array von array_unique() vergleichen, aber gibt's da nicht ne sauberere Möglichkeit/Funktion?

    Grüße und danke im Voraus.

    ps. Und achja, dicke Eier euch allen.
    Zuletzt geändert von DerUnsympath; 22.03.2008, 16:11.

  • #2
    das ist IMHO die sauberste variante.

    Kommentar


    • #3
      Na toll und ich habe mir die mühe gemacht und selber ein kleines Scritp dafür geschrieben ...
      Ich sollte mir mal ein PHP Handbuch kaufen!

      Hier mal mein kleines Script:

      $res = mysql_db_query("$dbname","SELECT keywords FROM dbank;");
      $num = mysql_num_rows($res);

      $wort=array();
      for ($l=0; $l<$num; $l++)
      {
      $keywords = mysql_result($res, $l, "keywords");
      $words = explode(",",$keywords);
      $e = count($words);
      for ($i=0; $i < $e; $i++)
      {
      if (!in_array($words[$i], $wort))
      {
      array_push($wort, $words[$i]);
      }
      }
      }

      print_r ($wort);

      nich ganz schön aber hat funktioniert ...

      Am besten währe es ja wenn man SQL schon die sache übernehmen lassen könnte.

      Ahhh habe gerade gesehen so leicht ist das mit dem array_unique gar nicht.
      Php löscht die Doppelten ja aber läst dann Arrays leer.

      Array ( [0] => Auto [1] => Fussball [2] => Schuppen [3] => Auto [4] => Schuppen [5] => Haus [6] => Schule [7] => Sport [8] => Zoggen [9] => Zocke [10] => Spielen [11] => )

      wird zu

      Array ( [0] => Auto [1] => Fussball [2] => Schuppen [5] => Haus [6] => Schule [7] => Sport [8] => Zoggen [9] => Zocke [10] => Spielen [11] => )

      jetzt ist aber zb die [3] und die [4] vom Array leer.
      Daher kommt es im weiter scriptverlauf zu fehlern.
      Wie kann man das umegehen ???
      Ich habe nur was coden können einen befehl hab ich nich dafür gefunden.

      $wort2 = ( array_unique ( $word ) );
      $wort = implode (",", $wort2);
      $wort = explode(",",$wort);
      print_r ($wort);
      Zuletzt geändert von RoXor_APU; 26.03.2008, 11:23.

      Kommentar


      • #4
        Am besten währe es ja wenn man SQL schon die sache übernehmen lassen könnte.
        DISTINCT?

        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Wie kann ich das abfragen?
          z.B. so
          PHP-Code:
          //sagen wir du hast $array mit den Werten
          if(count($array) == count(array_unique($array))){
            
          //keine doppelten Elemente
          }else{
            echo 
          'Folgende Elemente sind doppelt vorhanden:';
            
          var_dump(array_diff($array,array_unique($array)));

          Zuletzt geändert von jahlives; 26.03.2008, 11:19.
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            DISTINCT
            ist ein sehr schöner befehl kenn ich auch schon länger.
            Funzt aber nur bei Identischen werten.
            Und meine Spalte sieht zb so aus:

            ID WERT
            1 Auto,Zaun,Boot
            2 Haus,Auto,Flugzeug

            jetzt ist das Wort Auto in der Spalte doppelt, aber DISTINCT erkenne ja nur die ganze spalte!

            Kommentar


            • #7
              1 Auto,Zaun,Boot
              2 Haus,Auto,Flugzeug
              sieht auf den ersten blick wie ein designfehler aus.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Original geschrieben von RoXor_APU

                jetzt ist das Wort Auto in der Spalte doppelt, aber DISTINCT erkenne ja nur die ganze spalte!
                Ist ja auch ein blödsinniges DB-Design
                Original geschrieben von RoXor_APU
                Ich sollte mir mal ein PHP Handbuch kaufen!
                Vor allem solltest du mal die Forumsregeln und Kropff's Vorschläge zur Code-Formatierung studieren.
                So wird niemand deine Code anschauen
                Gruss
                H2O

                Kommentar


                • #9
                  Vor allem solltest du mal die Forumsregeln und Kropff's Vorschläge zur Code-Formatierung studieren.
                  Ei ei Sir!

                  Werde dann mal viel lesen .....

                  Nur das mit dem Db-Design hab ich nich ganz verstanden.
                  Ich kann doch nich jedes Keyword in ne Extra spalte schreiben. Dann hab ich ja mal evtl zu wenige oderständig leer spalten!

                  Kommentar


                  • #10
                    Ich kann doch nich jedes Keyword in ne Extra spalte schreiben. Dann hab ich ja mal evtl zu wenige oderständig leer spalten!
                    Das nennt sich dann Normalisierung. In deinem Beispiel würde das wie folgt aussehen:
                    Code:
                    Sammlungen           Sammlungen_Gegenstände                Gegenstände  
                    ----------           -----------------------------         -------------
                    ID                   ID_Sammlungen | ID_Gegenstand         ID | Name
                    ----------           -----------------------------         -------------
                    1                                1 |            1           1 | Auto
                    2                                1 |            2           2 | Zaun
                                                     1 |            3           3 | Boot
                                                     2 |            4           4 | Haus
                                                     2 |            1           5 | Flugzeug
                                                     2 |            5
                    Zuletzt geändert von tontechniker; 26.03.2008, 12:45.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      evt. hilft dir adhoc die mysql funktion FIND_IN_SET() weiter.
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        Ja hab ich soweit verstanden das mit dem Normalisieren ..
                        geht aber in meinen fall nichok Ich probier mal den Tabellenaufbau hier darzustellen.


                        Code:
                        ID      TEXT                                      KEYWORDS
                        1       Heute ist Dienstag.                       Wochentag, Zeit, Datum
                        2       Morgens ist schön.                        Spazieren, Wetter
                        3       Sonntags scheint die Sonne.               Wetter, Wochentag, Datum
                        So und wenn jetzt in der eingabe das Wort Wetter vor kommt sollen bei Einträge angezeigt werden. bzw. ich lasse sie per random ausgeben.
                        Das ist ja alles kein problem.

                        Problem ist die Keywords zu sammeln und dann doppelte zu killen.
                        Sonst müste ich Wort für Wort dein eingegeben Text mit den Keywords vergleichn und würde so ja evtl 20-30 mal die ganze Tabelle druchsuchen lassen.

                        Darum meine Idee Keywords sammeln und mit Text vergleichen als anders herum.

                        Sorry für die komplizierte angelegenheit ...

                        Kommentar


                        • #13
                          hat das irgendwer kapiert?
                          da is doch kein grader satz in deiner Problembeschreibung
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar


                          • #14
                            Und was spricht denn gegen mehrere Tabellen?
                            z.B. so
                            Code:
                            //Tabelle Inhalt
                            ID      TEXT                               KEYWORDS
                            1       Heute ist Dienstag.                1,2,3
                            2       Morgens ist schön.                 4,5
                            3       Sonntags scheint die Sonne.        1,3,5
                            
                            //Tabelle Keywords
                            ID      Inhalt
                            1        Wochentag
                            2        Zeit
                            3        Datum
                            4        Spazieren
                            5        Wetter
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              Das Problem ist die n:m-Beziehung zwischen Texten und Keywords. Deshlb brauchts neben den von jahlives genannten zwei Tabellen noch eine dritte:
                              Code:
                              Tabelle [i]text_keyword[/i]
                              T_ID,	K_ID
                              1	1
                              1	2
                              1	3
                              2	4
                              2	5
                              3	1
                              3	3
                              3	5
                              Gruss
                              H2O

                              Kommentar

                              Lädt...
                              X