我必须编写一个程序,输出随机字(随机字母),并且附近不会有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
答案 0 :(得分:2)
这应该适合你:
那我在这做了什么?
在第一部分中,我定义了数组$characters
,其中包含所有字符,例如[a-zA-Z]
。然后我还有$vowels
,其中包含所有元音,例如: [aAeEiIoOuU]
。我还定义了包含所有辅音的$consonants
。
在此之后,我将整个$characters
数组与shuffle()
混合,并从array_slice()
开始从$length
数组元素中获取。
然后我使用函数$randomWord
检查了check()
,该函数遍历随机单词的每个字符,并检查接下来的3个字符是元音还是辅音。我使用in_array()
执行此操作以检查字符是否在关联的数组中,例如$vowels
或$consonants
。如果是,我将行的中间字符更改为相反的例如vowels
- &gt; consonants
| consonants
- &gt; 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
答案 1 :(得分:1)
此代码对我来说是私密的,您可以使用它
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;
}