我有一个文本文件,我需要选择一个超过 6 个字符且少于 10 个字符的随机字符串。通常,我会使用这样的脚本,它可以工作,但由于它需要一定的长度,所以不起作用。有人对此有解决方案吗?
示例输入如下所示:
Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
Somelongfruithere
这些值将位于.txt文件中,每个文件都有一个换行符。允许的字符串的一个示例是 pineapple
,但不允许apple
或Somelongfruithere
。
你需要做这样的事情:
$lines = array();
$tmpLines = file('random.txt');
for($i = 0; $i < count($tmpLines); ++$i)
{
if(strlen($tmpLines[ $i ]) > 6 && strlen($tmpLines[ $i ]) < 10)
{
$lines[] = $tmpLines[ $i ];
}
}
$randomWord = $lines[ array_rand($lines) ];
在行数上,较短的方式是这样的(但安全性要低得多):
$randomWord = '';
$lines = file('random.txt');
while(strlen($randomWord) <= 6 || strlen($randomWord) >= 10)
$randomWord = $lines[ array_rand($lines) ];
第一个选项获取文件中的所有行,并仅将长度在 6 到 10 个字符之间的行复制到另一个数组。从此数组中选择随机元素时,可以"保证"任何随机字符串的合理访问时间。
第二个选项只是继续选择一个随机字符串,直到选择一个合适的长度,但可能需要一段时间,具体取决于随机数生成器的心情。不太可能,但我不想冒险。在我的书中,始终将可靠性作为最佳方法。
我会
说explode
文本文件到一个变量中,运行随机生成器以获取放置值(随机字符串的位置),然后在循环中(do/while 循环),从分解变量中提取字符串,并检查其长度以确保它是您想要的
if (strlen($rand_word) > 6 && strlen($rand_word) < 10) {
//execute function and end loop
} else {
// keep checking using a new random placement number
}
答案取决于要求。如果您需要从一组字符串中进行选择,并且只接受符合您条件的字符串,则需要使用 strlen,如果长度不正确,请重试。
否则,您仍然需要 strlen,以确保它至少是 6 个字符,但您可以使用 substr 将其剪切到 10。如果空格不算在内,请在 strlen 和 substr 之前使用 ltrim & rtrim。
首先找到所有在正确字符范围内的单词,然后从生成的数组中随机抽取一个单词:
$fileLines = file('somefile.txt');
$myWords = array();
foreach ($fileLines as $line)
{
$thisLine = split(" ",$line);
foreach ($thisLine as $word)
{
$length = strlen($word);
if ($length > 6 && $length < 10)
{
$myWords[] = $word;
}
}
}
$randomWord = $myWords[array_rand($myWords)];
缩短的方式!
for ($i=7; $i<=9; $i++)
if (strlen($str) == $i )
echo "bingo! " . strlen($str);