Gunther: mehrere Strings zu einem zusammenführen ohne Duplikate

Hallo SelfHTML Gemeinde!

Folgendes Problem:
Ich habe vier Strings ($var_1, $var_2, $var_3, $var_4), die jeweils Daten aus einer MySQL Tabelle enthalten, uns zwar in der Form: <text_1>|text_2[text_3|text_4]||text_5 usw.

Häufig enthalten $var_1-4 größtenteils identische Werte.

Ich möchte nun aus den 4 Strings einen (oder auch ein Array) machen, der/das

  • nur die Werte "text_xy" (also ohne die Zeichen '|', '<', '>', '[',']', etc.)
  • jeden Wert "text_xy" nur einmal
    enthält.

Für letzteres bietet sich vermutlich der Einsatz von Regexp an, wovon ich leider so gut wie gar keine Ahnung habe. Daher wäre ich für eine etwas ausführlichere Anleitung sehr dankbar!

Meine Frage also: Wie kann ich diese Aufgabenstellung am einfachsten (, bzw. am elegantesten) lösen?

Für deine Hilfe meinen besten Dank im voraus!

Gruß Gunther

  1. Hi,

    Ich möchte nun aus den 4 Strings einen (oder auch ein Array) machen, der/das

    • nur die Werte "text_xy" (also ohne die Zeichen '|', '<', '>', '[',']', etc.)
    • jeden Wert "text_xy" nur einmal
      enthält.

    Mein spontaner Ansatz:

    var1 per split auftrennen in ein Array mit den Werten (als Trenner eine Zeichenklasse der unerwünschten Zeichen, die ein oder mehrfach auftreten können.
    Die Array-Elemente als keys für ein assoziatives Array verwenden (als Wert einfach die 1 oder ähnliches verwenden, wird eh nicht gebraucht).

    Wiederholen mit var2, dabei dasselbe assoziative Array verwenden (jetzt werden evtl. schon vorhandene keys nicht erneut angelegt).
    Wiederholen mit var3, var4, ...

    Zum Schluß mit array_keys die keys aus dem assoziativen Array rausholen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi Andreas,

      Mein spontaner Ansatz:

      ... (als Trenner eine Zeichenklasse der unerwünschten Zeichen, die ein oder mehrfach auftreten können).

      damit hast du mich ja wieder vor Probleme gestellt...!(Ich schrieb ja bereits, dass mir die 'Konstruktion' von Regexps noch fast gänzlich unbekannt ist.)

      Die Array-Elemente als keys für ein assoziatives Array verwenden (als Wert einfach die 1 oder ähnliches verwenden, wird eh nicht gebraucht).

      Wiederholen mit var2, dabei dasselbe assoziative Array verwenden (jetzt werden evtl. schon vorhandene keys nicht erneut angelegt).
      Wiederholen mit var3, var4, ...

      Zum Schluß mit array_keys die keys aus dem assoziativen Array rausholen.

      cu,
      Andreas

      Angeregt durch deinen Vorschlag, habe ich jetzt folgenden Ansatz gewählt (, der zu funktionieren scheint):

      Schritt 1:
      Ich führe alle 4 Strings zu einem zusammen (mit jeweils einem Leerzeichen dazwischen)

      $var_neu_1=$var_1." ".$var_2." ".$var_3." ".$var_4;

      Schritt 2:
      Unter Verwendung der Funktion 'preg_split' zerlege ich nun den so gewonnenen String mit Hilfe der von dir erwähnten Trenner (als Trenner eine Zeichenklasse der unerwünschten Zeichen, die ein oder mehrfach auftreten können)

      $var_neu_2= preg_split('/[\s,|\s||[|]|\*|{|}|?]+/', $var_neu_1, -1, PREG_SPLIT_NO_EMPTY);

      Schritt 3:
      Das so entstandene Array enthält jetzt noch die doppelten Einträge. Diese eleminiere ich jetzt mit Hilfe der Funktion 'array_unique' (da für mich ja eh nur die Werte und nicht die Schlüssel des Arrays interessant sind)

      $result = array_unique($var_neu_2);

      Fertig!

      Wahrscheinlich runzeln die PHP Experten unter euch jetzt die Stirn, daher wäre es nett, wenn mir jemand noch ein paar Tipps, insbesondere zu dem Regexp in Schritt 2 geben könnte (folgende Zeichen sollen eleminiert werden: [,],|,{,},Leerzeichen,*,?).

      Vielen Dank!

      Gruß Gunther