2016-05-20 10 views
0

Ich habe die folgende ZeichenfolgePHP: String-Manipulation wählen zufällig

Make me {cum|cumm}.... mmmm {Phones|Phone's} {gonna|going to|going} 

Es gibt einige Rollen.

Der Text in geschweiften Klammern hat eine Pipe Zeichen "|". bedeutet, einer von zwei Werten.

Wenn wir {Phone | Phone's} wählen, möchte ich eines von ihnen zufällig auswählen und es kann mehr als zwei oder drei Werte oder sogar einen einzelnen Wert in geschweiften Klammern haben.

So die obige Zeichenfolge kann eine der folgenden führen

  1. Make me cumm .... mmmm Phones gehen

  2. Make me cumm .... mmmm Phone zu

    gehen
  3. Make me
  4. cum .... mmmm Phones gehen

  5. Make me cumm .... mmmm Telefon geht zu

aktualisieren

I hatte eine längere Lösung

preg_match_all("~\{(.*?)\}~",$string,$matches); 

    foreach($matches[1] as $match) { 
     $options = explode("|", $match); 
     if(count($options) > 0) { 
      $key = array_rand($options); 
      $randomValue = $options[$key]; 

      $string = str_replace("{".$match."}", $randomValue, $string); 
     } 
    } 

    return $string; 

Antwort

3

Verwendung preg_replace_callback Funktion, Split entspricht, und ein Zufallselement des resultierenden Arrays nehmen

$new = preg_replace_callback('/{([^}]+)}/', 
          function($i) { 
           $t = explode('|', $i[1]); 
           return $t[array_rand($t)]; }, 
          $string); 
echo $new; 
Verwandte Themen