• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP - Vokale einsetzen zwischen zwei Konsonanten

hanshans

New member
Hallo Leute! In automatisch erstellten Namen möchte ich zwischen zwei oder drei hintereinander auftretende Konsonanten je einen Vokal einsetzen. Ich dachte, das wäre einfach, deshalb habe ich das hier geschrieben.

PHP:
$k = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z');
$v = array('a','e','i','o','u','y');

$kk = $k.$k;
$kvk = $k.$v.$k;

$name = str_replace($kk,$kvk,$name);

Natürlich hat es nicht funktioniert. Das wäre ja zu einfach. Ist die Lösung weitaus komplizierter? Oder kann PHP auch einfach?
 
Danke für die Antwort. Aber hoffentlich nicht nur die letzten zwei Buchstaben, ich meine auch mittendrin und am Anfang, also im ganzen Namenstring.
 
PHP:
$k = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z');
$v = array('a','e','i','o','u','y');
$name = "";
$len = intval(rand(4,20));

function rand_v($matches) {
  return $matches[0].$v[intval(rand(0,count($v)))];
}

for($i=0; $i<$len; $i++) {
  if(rand() > 0.5)
    $name .= $k[intval(rand(0,count($k)))];
  else
    $name .= $v[intval(rand(0,count($k)))];
  }
}
$name = preg_replace_callback( "/[^aeiouy]{3}/", "rand_v", $name);
ungetestet
 
Jetzt habe ich verstanden, das soll mein ganzes Script komplett ersetzen. Also nochmals DANKE.
 
Zuletzt bearbeitet:
Code:
$k = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z');
$v = array('a','e','i','o','u','y');
$name = "";
$len = intval(rand(4,20));

function rand_v($matches) {
  $v = array('a','e','i','o','u','y');
  return substr($matches[0],0,3).$v[intval(rand(0,count($v)))].substr($matches[0],3,1);
}

for($i=0; $i<$len; $i++) {
  if(rand(0,2) > 1)
    $name .= $k[intval(rand(0,count($k)))];
  else
    $name .= $v[intval(rand(0,count($v)))];
}
$name = preg_replace_callback( "/([^aeiouy]{4})/", "rand_v", $name);
so gehts
 
Also vielen Dank. Es ist nur so, dass ich den Namen automatisch erstellen lasse und zwar mit der IP-Adresse, aus Zahlen werden buchstaben, die Punkte entfernt, damit jeder Beitrag vom selben Surfer auch den selben Namen bekommt. (Zumindest solange er die selbe IP behält.) Leider kann ich deine Random-Funktion nicht verwenden, weil jeder Beitrag vom selben Surfer einen anderen Namen hätte. Ich wollte nur zwei oder drei Konsonanten hintereinander mit je einem Vokal dazwischen versehen.

Sorry wegen deiner Mühe.
 
PHP:
$v = array('a','e','i','o','u','y');
$name = substr($name, 0, 2).$v[intval(rand(0,count($v)))].substr($name, 2);
 
Vielen Dank für deine Hilfen. Ich meinte nur zwischen zwei Konsonanten. Du auch? Also der Name lautet z.B. eduratqa.

Und jetzt wollte ich per Zufall einen der Vokale mit y: a,e,i,o,u,y auswählen und diesen einfügen, und zwar so:

eduratiqa
 
Und nach welchen Kriterium willst du entscheiden, welcher Vokal eingefügt wird wenn du nicht den Zufall entscheiden lassen willst?
 
An kkapsner. Die Erstellung von name wollte ich nicht per Zufall machen. Die Auswahl eines Vokals schon. Aber am Wichtigsten ist doch die Überschrift dieses Themas: Einen Vokal zwischen zwei Konsonanten einsetzen.
 
Njo - das ist nicht so schwer:
PHP:
$name = "wasauchimmer";
$name = preg_replace_callback("/([^aeiouy]{2,})/", create_function('$match', 'return implode("a", str_split($match[1]));'), $name);
echo $name;
Das mit dem Zufall musst du dir irgendwie noch einmal durch den Kopf gehen lassen.
 
An kkapsner: Das habe ich verstanden. Interessant ist nur, dass AUCH in deiner Scripthilfe nicht direkt ein Array mit Konsonanten vorkommt. Warum auch immer du die "Alles außer"-Variante verwendest, trotzdem vielen Dank für deine Hilfe, kkapsner.
 
Du kannst das [^aeuoiy] natürlich auch durch eine Ansammlung der Konsonanten ersetzen - ist nur einfach kürzer und was in dem Namen drin steht kontrollierst du ja auch - also kann da nicht so was wie " hh ä#++" drin stehen.
Warum willst du denn umbedingt einen Array von Konsonanten?
 
Zurück
Oben