Php 从文本文件中选择6个字符以上10个字符以下的随机字符串

Php 从文本文件中选择6个字符以上10个字符以下的随机字符串,php,random,Php,Random,我有一个文本文件,我需要选择一个超过6个字符,低于10个字符的随机字符串。通常情况下,我会使用一个脚本,比如,它可以工作,但是因为它需要一定的长度,所以不起作用。有人能解决这个问题吗 示例输入如下所示: Apple Banana Orange Strawberry Blueberry Pineapple Somelongfruithere $lines = array(); $tmpLines = file('random.txt'); for($i = 0; $i < count($t

我有一个文本文件,我需要选择一个超过6个字符,低于10个字符的随机字符串。通常情况下,我会使用一个脚本,比如,它可以工作,但是因为它需要一定的长度,所以不起作用。有人能解决这个问题吗

示例输入如下所示:

Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
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) ];

这些值将在一个.txt文件中,每个文件都有一个换行符。允许使用的字符串示例是
菠萝
,但不允许使用
苹果
长水果。

我会说
将文本文件分解成变量,运行随机生成器获取放置值(随机字符串的位置),然后在循环中(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
}
if(strlen($rand\u word)>6&&strlen($rand\u word)<10){
//执行函数并结束循环
}否则{
//使用新的随机放置编号继续检查
}

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

$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)];
$fileLines=file('somefile.txt');
$myWords=array();
foreach($line作为$line的文件行)
{
$thisLine=split(“,$line);
foreach($word形式的此行)
{
$length=strlen($word);
如果($length>6&&$length<10)
{
$myWords[]=$word;
}
}
}
$randomWord=$myWords[array_rand($myWords)];

您需要执行以下操作:

Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
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) ];
$lines=array();
$tmpLines=file('random.txt');
对于($i=0;$i6和&strlen($tmpLines[$i])<10)
{
$lines[]=$tmpLines[$i];
}
}
$randomWord=$lines[array_rand($lines)];
一种较短的方式,在行数上,是这样的(但安全性要低得多):

$randomWord='';
$lines=file('random.txt');
while(strlen($randomWord)=10)
$randomWord=$lines[array_rand($lines)];
第一个选项获取文件中的所有行,并仅将长度在6到10个字符之间的行复制到另一个数组。当从这个数组中选择一个随机元素时,可以“保证”任何随机字符串都有一个合理的访问时间


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

答案取决于需求。 如果需要从一组字符串中进行选择,并且只接受一个符合条件的字符串,则需要使用strlen,如果长度不正确,请重试

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

缩短方式

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

for($i=7;$i在你的标题
中选择字符串
,在你的帖子
中选择一个随机字符串
,它是:oDefine“random string”。一个单词?句子的一部分?在字符串的开头/结尾空格是否计数?等等[来自链接]它会给你整行,而不是一个字符串我是说一个单词,就像我说的,脚本会很完美;所有的字符串都在不同的行上。你需要多久做一次?是每分钟做几千次还是每天做一次?对输入进行一些预处理当然可以提高性能。嗯,为什么是downvote?这实际上与公认答案的逻辑相同。