【发布时间】:2011-12-16 13:38:34
【问题描述】:
我在 PHP 中随机生成字符,使用:
for ($i = 0; $i < $length; $i++) {
$generatedCode .= chr(rand(97, 122));
}
但我不希望字母“g”和“m”出现在随机生成的字符串中,我该怎么做?
【问题讨论】:
标签: php
我在 PHP 中随机生成字符,使用:
for ($i = 0; $i < $length; $i++) {
$generatedCode .= chr(rand(97, 122));
}
但我不希望字母“g”和“m”出现在随机生成的字符串中,我该怎么做?
【问题讨论】:
标签: php
for ($i = 0; $i < $length; $i++) {
$generated = chr(rand(97, 122));
if ($generated != "g" && $generated != "m") {
$generatedCode .= $generated;
}
else{
$i--;
}
}
【讨论】:
else $i-- 有点丑。为什么不只在正确的情况下递增,而不是每次递增,在不正确的情况下递减?
while (in_array($generated = chr(rand(97, 122)),array('g','m'))) continue; $generatedCode .= $generated;
continue; 语句的 while 循环来使其不那么难看,这是邪恶的。糟糕的while循环滥用:(
执行循环,直到正确的值到位。
for ($i = 0; $i < $length;) {
$code = chr(rand(97, 122));
if ($code !== 'm' && $code !== 'g') // add the correct values here
{
$i++
$generatedCode .= $code;
}
}
【讨论】:
for ($i = 0; $i < $length; $i++) {
do {
$randChar = chr(rand(97, 122));
} while($randChar != 'g' && $randChar != 'm');
$generatedCode .= $randChar;
}
【讨论】:
$chars = array_diff(range('a', 'z'), array('g', 'm'));
$generatedCode = '';
for ($i = 0; $i < $length; $i++) {
$generatedCode .= $chars[array_rand($chars)];
}
【讨论】:
while (strlen($generatedCode) < $length) { ... } 稍微清理一下,而不是引入计数变量,但这仍然是最好的解决方案。
简单地说,过滤掉'g'和'm';
<?php
$length = 8;
$generatedCode = '';
while( strlen( $generatedCode ) < $length ) {
$random = chr(rand(97, 122));
if( !in_array( $random, array( 'g', 'm' ) ) ) {
$generatedCode .= $random;
}
}
echo $generatedCode;
【讨论】: