Вывод случайных слов

Я должен написать программу, которая будет выводить случайные слова (со случайными буквами), и у которых не будет 3 вокала или согласных рядом, поэтому я написал:

$array = array();
$n = 10;

for($i = 0; $i < $n; $i++) {
$l = rand(4, 10);  //$l = word length
?>

<br>

<?

for ($j = 0; $j < $l; $j++) {

$cas = rand(65, 90);  //$cas=random letters
$array[$j] = $cas;

if($j > 1) {
if (($array[$j-1] == 65 || $array[$j-1] == 69 || $array[$j-1] == 73 || $array[$j-1] == 79 || $array[$j-1] == 85) ^ ($array[$j-2] == 65|| $array[$j-2] == 69 || $array[$j-2] == 73 || $array[$j-2] == 79 || $array[$j-2] == 85)) {  //will do XOR '^'

$cas = rand(65, 90);
$array[$j] = $cas;

}

}

$m = chr($array[$j]);
echo $m;
}
}?>

</body>
</html>

не знаю почему, но кажется, что IF не работает, потому что, когда он выводит, он печатает также слова с 3 или более согласными или вокалом.
Кто-нибудь может мне помочь? спасибо: D и извините за плохой английский: P

-2

Решение

Это должно работать для вас:

Так что я здесь сделал?

В первой части я определил массив $characters который содержит все символы, например[a-zA-Z], Тогда у меня тоже $vowels который содержит все гласные, например [aAeEiIoOuU], И я также определил $consonants который содержит все согласные.

После этого я перепутал весь $characters массив с shuffle() и взял $length элементы массива с самого начала array_slice().

Затем я проверил $randomWord с функцией check(), который проходит через каждый символ случайного слова и проверяет, являются ли следующие 3 символа гласными или согласными. Я делаю это с in_array() проверить, находится ли символ в связанном массиве, например, $vowels или же $consonants, Если да, я меняю средний символ строки на противоположный, например, vowels -> consonants | consonants -> vowels, И если не найдено ни одной строки гласных или согласных, возвращается случайное слово.

В конце я просто использую array_map() с chr() пройти через каждый элемент массива и изменить его с ASCII на соответствующий символ.

Чтобы распечатать это я использовал implode() добавить каждый символ вместе.

<?php

$characters = array_merge(range(65, 90), range(97, 122));
$vowels = array(65, 97, 69, 101, 73, 105, 79, 111, 85, 117);
$consonants  = array(66, 98, 67, 99, 68, 100, 70, 102, 71, 103, 72, 104, 74, 106, 75, 107, 76, 108, 77, 109, 78, 110, 80, 112, 81, 113, 82, 114, 83, 115, 84, 116, 86, 118, 87, 119, 88, 120, 89, 121, 90, 122);
$randomWord = "";
$length = rand(4, 10);

shuffle($characters);
$randomWord = array_slice($characters, 0, $length);

function check($randomWord, $vowels, $consonants) {

foreach($randomWord as $key => $randomCharacter) {

//Check for vowels
if(in_array($randomWord[$key], $vowels) && ( isset($randomWord[$key+1]) && in_array($randomWord[$key+1], $vowels) ) && ( isset($randomWord[$key+2]) && in_array($randomWord[$key+2], $vowels) )) {
$randomWord[$key+1] = $consonants[array_rand($consonants, 1)];
check($randomWord, $vowels, $consonants);
}

//Check for consonants
if(in_array($randomWord[$key], $consonants) && ( isset($randomWord[$key+1]) && in_array($randomWord[$key+1], $consonants) ) && ( isset($randomWord[$key+2]) && in_array($randomWord[$key+2], $consonants) )) {
$randomWord[$key+1] = $vowels[array_rand($vowels, 1)];
check($randomWord, $vowels, $consonants);
}

}

return $randomWord;
}

$randomWord = check($randomWord, $vowels, $consonants);
echo $randomWord = implode("", array_map("chr", $randomWord));

?>

Пример выходов:

YeVIkufuhv
lEMObi
VosaKAzIRb
qOyoK
IBoVIQahIg
2

Другие решения

Этот код является частным для меня, вы можете использовать его

function random_string($hashstring=null,$randLengh=null)
{
$string = $hashstring;
$randLengh =$randLengh;
if ($string == null) {
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
$charactersLength = strlen($string);
$randomString = '';
for ($i = 0; $i < $randLengh; $i++) {
$randomString .= $string[rand(0, $charactersLength - 1)];
}

return $randomString;
}
1

По вопросам рекламы [email protected]