Gruppierung in Regulären Ausdrücken

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

  • Gruppierung in Regulären Ausdrücken

    Hi,
    ich habe ein kleines aber ziehmlich ärgerliches problem mit dem ich mich jetzt schon seeeeeehr lange rumschlage

    ich habe einen String der folgender maßen aussieht "|12|15|6|" ...als Beispiel.
    die Zahlen sind ID's für kategorien...ein user kann jetzt seine Kategorien bearbeiten. Das ganze geht über checkboxen, Mehrfachauswahl also.

    über eine schleife wird aus der auswahl dann ein neuer String zusammengestelt der dann ´z.B. so aussieht "|2|3|16|"

    In einer schleife werden dann die beiden Strings verglichen und der neue entsprechend angepasst, um doppeleinträge zu verhindern...

    PHP-Code:

    if(ereg("[|]+[".$new_cat_array[$i2]."]+[|]"$old_data[categories]))
      {
    $new_cat_string ereg_replace("[".$new_cat_array[$i2]."]+[|]"""$new_cat_string);} 
    Das eigentliche problem ist jetzt das wenn im neuen String z.B. "16" enthalten ist und im alten "6" dann nimmt der díe 16 aus dem neuen string da er die 6 im Alten findet...vom code her kann das auch nicht anders sein, ich müsste die 16 also irgendwie so maskieren das die 1 und die 6 ("16")als EINE zahl gesehen werden...wer kann mir sagen wie ich das machen kann.

    Grüße und schon mal Danke, Flo

  • #2
    Hi,

    zerlege den string mit explode() doch erstmal in ein array, dazu gibts auch genug beiträge im forum.

    Gruß GriZZ

    Kommentar


    • #3
      Re: Gruppierung in Regulären Ausdrücken

      Original geschrieben von ultimazer_1
      ich habe einen String der folgender maßen aussieht "|12|15|6|" ...als Beispiel.
      die Zahlen sind ID's für kategorien...
      das klingt schon mal nach einem ... uhm, suboptimalen datenmodell.

      In einer schleife werden dann die beiden Strings verglichen und der neue entsprechend angepasst, um doppeleinträge zu verhindern...
      wie zum ... kommt man auf die idee, für so etwas regex zu bemühen?

      mit explode() am | aufteilen, schon hast du jeweils ein array mit allen IDs.

      diese beiden arrays schmeißt du dann zusammen, und wirfst mit array_unique() die doppelten werte raus.

      und ja, wenn du deine verkorkste datenstruktur wirklich behalten willst, kannst du aus diesem array mittels implode() dann auch wieder deinen |-getrennten string draus machen ...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        auf die Art hab ich's auch schon probiert und dann halt mit in_array() aber das klappte irgendwie nicht immer und produzierte auch Fehler...Doppeleinträge

        die Methode oben funzt ja soweit bloß eben wenn so Sachen wie 6 und 16 oder 5 und 15 drin sind nicht.

        Grüße, Flo

        Kommentar


        • #5
          Re: Re: Gruppierung in Regulären Ausdrücken

          p.s.:
          Original geschrieben von wahsaga
          mit explode() am | aufteilen, schon hast du jeweils ein array mit allen IDs.

          diese beiden arrays schmeißt du dann zusammen
          das kann man natürlich auch noch einfacher haben, wenn man vorher einfach den alten und den neuen string verkettet, und dann auf das ergebnis explode() anwendet.
          (nur evtl. mit || aufpassen, weiß nicht was explode daraus macht.)
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            hehe,
            da haben wir wohl gerade zur selben zeit geschrieben...ok cool, das werd ich dann mal versuchen.

            Danke.

            Aber wieso ist das eine "verkorkste" Datenstruktur?, wenn du da einen ehrlichen Tipp hast nehm ich den gerne an

            Grüße, Flo

            Kommentar


            • #7
              Original geschrieben von ultimazer_1
              Aber wieso ist das eine "verkorkste" Datenstruktur?
              na ja, wieso speicherst du solche daten in einem string?

              du siehst doch, wie viel mühe es macht, den auseinanderzupflücken, wenn du die einzelnen werte brauchst.

              warum nimmst du nicht gleich ein array dafür?


              wenn es um das speichern in einer textdatei geht - dazu kann man das array in einen string umandeln, bzw. nach dem einlesen den string wieder in ein array - mit serialize/unserialize.

              das ist ein einzelner befehl nach dem einlesen, bzw. vor dem speichern - und im rest deines scriptes kannst du dann problemlos mit dem array arbeiten, und brauchst keine stringoperationen oder gar regex, um an die einzelnen werte zu kommen ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ne ne,
                klar.

                das ganze wird halt in der DB gespeichert und ich arbeite dann immer nur mit dem string, aber bevor man das speichert will ich halt das dass da späer nicht zu fehlern kommt.

                aber danke für die Antwort array_unique() ist dann denke ich die Lösung
                kannte die func() bloß so noch nicht
                Grüße, Flo

                Kommentar


                • #9
                  jo cool, klappt perfekt

                  danke, Flo

                  Kommentar

                  Lädt...
                  X