从文本文件中选择超过 6 个字符和 10 个字符以下的随机字符串


Select random strings over 6 and under 10 characters from text file

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

示例输入如下所示:

Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
Somelongfruithere

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

你需要做这样的事情:

$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);