3

テキストファイルがあり、6文字を超え10文字未満のランダムな文字列を選択する必要があります。通常はこのようなスクリプトを使用しますが、これは機能しますが、一定の長さが必要なため、機能しません。誰かがこれに対する解決策を持っていますか?

サンプル入力は次のようになります。

Apple
Banana
Orange
Strawberry
Blueberry
Pineapple
Somelongfruithere

これらの値は.txtファイルにあり、それぞれに改行が付いています。許可される文字列の例は、ですが、許可さpineappleれないappleか、Somelongfruithere許可されません。

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文字の行のみを別の配列にコピーします。この配列からランダムな要素を選択すると、任意のランダムな文字列に対する妥当なアクセス時間が「保証」されます。

2番目のオプションは、適切な長さの1つが選択されるまでランダムな文字列を選択し続けますが、乱数ジェネレーターのムードによっては時間がかかる可能性があります。可能性は低いですが、私はそれを危険にさらしたくありません。私の本では、常に信頼性を最善のアプローチとしてとらえています。

于 2012-04-18T02:17:00.213 に答える
1

答えは要件によって異なります。文字列のグループから選択する必要があり、条件に一致するものだけを受け入れる必要がある場合は、strlenを使用して、長さが正しくない場合は再試行する必要があります。

それ以外の場合は、少なくとも6文字であることを確認するためにstrlenが必要ですが、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 に答える