3

我有一个文本文件,我需要选择一个超过 6 个字符且少于 10 个字符的随机字符串。通常,我会使用这样的脚本它会起作用,但由于它需要有一定的长度,所以它不起作用。有人对此有解决方案吗?

示例输入将是这样的:

Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
Somelongfruithere

这些值将位于 .txt 文件中,每个文件都有一个换行符。允许的字符串示例是pineapple, but appleorSomelongfruithere不被允许。

4

5 回答 5

1

我会把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
}
于 2012-04-18T02:14:08.630 回答
1

你需要做这样的事情:

$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 个字符之间的行复制到另一个数组。从这个数组中选择一个随机元素时,您“保证”了任何随机字符串的合理访问时间。

第二个选项只是继续选择一个随机字符串,直到选择一个合适的长度,但可能需要一段时间,具体取决于随机数生成器的心情。不太可能,但我不想冒险。在我的书中,始终将可靠性作为最好的方法。

于 2012-04-18T02:17:00.213 回答
1

答案取决于需求。如果您需要从一组字符串中进行选择并且只接受一个符合您标准的字符串,那么您需要使用 strlen 并在长度不正确时重试。

否则,您仍然需要 strlen,以确保它至少为 6 个字符,但是您可以使用 substr 将其减少到 10。如果不计算空格,请在 strlen 和 substr 之前使用 ltrim 和 rtrim。

于 2012-04-18T02:18:00.923 回答
0

首先找到正确字符范围内的所有单词,然后从结果数组中随机抽取一个:

$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)];
于 2012-04-18T02:16:30.533 回答
-1

缩短的方式!

for ($i=7; $i<=9; $i++)
    if (strlen($str) == $i )
       echo "bingo! " . strlen($str);
于 2012-04-18T02:38:04.097 回答