Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Suchen & ersetzen - deluxe

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Suchen & ersetzen - deluxe

    Hallo.

    Ich bastle gerade an einem PHP-Script, welches Teile eines Textes per Zufall ersetzen soll. Möglichkeiten der Ersetzungen werden im Text gleich mitgegeben.

    Ein Beispiel: Aus der Zeichenkette "Das ist [genau richtig|vielleicht richtig|sicherlich ok]. Oder?!" können drei Varianten entstehen.

    Variante 1. Das ist genau richtig. Oder?!
    Variante 2. Das ist vielleicht richtig. Oder?!
    Variante 3. Das ist sicherlich ok. Oder?!

    Hierzu haben ich folgendes Script geschrieben:

    Code:
    $zeichenkette="Das ist [genau richtig|vielleicht richtig|sicherlich ok]. Oder?!";
    echo "<p>Variante 1: <em>".$zeichenkette."</em></p>";
    preg_match_all("!\[([^\]]*)!",$zeichenkette,$ergebnisse);
    foreach ($ergebnisse[1] as $code)
    {
    $zufall = explode("|", $code);
    $neu=$zufall[array_rand($zufall,1)];
    }
    $zeichenketteneu = str_replace("[".$code."]",$neu, $zeichenkette);
    echo "<p><strong>Ergebnis: ".$zeichenketteneu."</strong></p>";
    Das Script funzt gut und erledigt seine Arbeit. Allerdings, sobald ich in der Zeichenkette eine zweite oder dritte Wortfolge einbaue ...

    also z.B.: $zeichenkette="Das ist [genau richtig|vielleicht richtig|sicherlich ok]. Oder?! [Warum|Wieso|Weshalb] sollte es auch anders sein?";

    ... wird nur noch die letzte Wortgruppe akzeptiert und ausgewertet.

    [Sackgasse|Einbahnstraße|Ende?]
    Nun weiß ich nicht mehr weiter. Hat jemand eine Idee?

    Viele Dank im voraus, Fresh


  • #2
    Das liegt daran dass du $neu jedes mal wenn du die Schleife durchgehst überschreibst. So wird am Ende NUR $code und $neu ersetzt das beim letzten Schleifendurchgang gesetzt wurde.

    Du musst das str_replace IN die foreach() Schleife mit einbauen.

    ODER

    Du schreibst den aktuellen Code + das Neue in ein Array und ersetzt das dann NACH der Schleife ...

    PHP-Code:
    <?php
    $replace_code 
    = array();
    $replace_neu = array();
    foreach (
    $ergebnisse[1] as $code) {
        
    $zufall explode("|"$code);

        
    $replace_code[] = '['.$code.']';
        
    $replace_neu[] = $zufall[rand(0count($zufall) - 1)];
    }
    $zeichenketteneu str_replace($replace_code$replace_neu$zeichenkette);

    Kommentar


    • #3
      Perfekt

      Tausen Dank, Florian! It works!

      Kommentar

      Lädt...
      X