从文本文件中选择6到10个字符之间的随机字符串。

3
我有一个文本文件,需要挑选一个随机字符串,该字符串长度超过6个字符但不超过10个字符。通常,我会使用像这样的脚本,这可以工作,但由于需要特定长度,所以这种方法行不通。请问是否有解决方案?
一个示例输入可能是这样的:
Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
Somelongfruithere

这些值将保存在一个 .txt 文件中,每个值占据一行。允许的字符串示例为 pineapple,但不允许出现 appleSomelongfruithere


在您的标题“选择字符串”中,在您的帖子中,“一个随机字符串”,是哪个? :o - Andreas Wong
定义“随机字符串”。是单个词吗?还是句子的一部分?字符串开头/结尾的空格是否计入其中?等等。 - inspector-g
[从链接中] 它会给你整行而不是一个字符串。 - ro ko
我指的是一个单词,就像我说的那样,脚本会很完美;所有字符串都在不同的行上。 - neex1233
你可能需要提供一些样例输入和输出,这样我们才能明白你想要实现什么。 - sarnold
1
你需要多久才需要做这个?它每分钟需要执行几千次还是每天执行一次?对输入进行一些预处理肯定能提高性能。 - sarnold
5个回答

1
答案取决于需求。 如果您需要从一组字符串中选择并仅接受符合标准的一个,则需要使用strlen,如果长度不正确,则需要再次尝试。
否则,您仍然需要使用strlen,以确保它至少为6个字符,但然后可以使用substr将其剪切到10个字符。如果空格不计入字符数,请在strlen和substr之前使用ltrim和rtrim。

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
}

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

第二个选项只是继续选择随机字符串,直到选择到适当长度的字符串为止,但是根据随机数生成器的心情,可能需要一段时间。虽然不太可能,但我不想冒险。在我的书中,始终以可靠性为最佳方法。


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

为什么要踩呢?这实际上是与被接受的答案相同的逻辑。 - davidethell

-1

简化方式!

for ($i=7; $i<=9; $i++)
    if (strlen($str) == $i )
       echo "bingo! " . strlen($str);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接