私はPHPの20単語の配列です。この配列から特定の文字で始まるランダムな単語を抽出する方法はありますか?
たとえば、B で始まる単語が必要な場合は、次のように言います。
$arr=array('apple','almond','banana','boat','carrot');
その後、半分の時間でバナナを返すか、半分の時間でボートを返します。
この配列から特定の文字で始まるランダムな単語を取得するにはどうすればよいですか?
私はPHPの20単語の配列です。この配列から特定の文字で始まるランダムな単語を抽出する方法はありますか?
たとえば、B で始まる単語が必要な場合は、次のように言います。
$arr=array('apple','almond','banana','boat','carrot');
その後、半分の時間でバナナを返すか、半分の時間でボートを返します。
この配列から特定の文字で始まるランダムな単語を取得するにはどうすればよいですか?
以下は、単に「最初の文字をチェックする」よりも複雑で、すべての適格な単語が配列内で連続しているなどに依存しない、適格な単語を選択する方法でも機能します。
$candidatestested = 0;
foreach ($arr as $candidate) {
if ($candidate[0] == 'b' && rand(0,$candidatestested++)==0) {
$result = $candidate;
}
}
if (!$candidatestested) {
trigger_error("There was no word matching the criterion");
}
return $result;
これは機能するはずです。配列をシャッフルした後、「B」またはいずれかの文字で始まる各単語は、シャッフルされた配列の最初になる可能性がランダムにあります。PHPのshuffle()に依存することは、おそらく私たち自身の実装よりも効率的で高速です。
function returnWithFirstLetter($words, $letter) {
shuffle($words);
foreach($words as $word)
if($word[0] == $letter)
return $word;
}
クイック&ダーティ、ここに行きます:
function returnRandomWithLetter($words, $letter)
{
// put all words in different bins, one for each different starting letter
$bins = array();
foreach($words as $word)
{
$bins[$word[0]][] = $word;
}
// return random component from chosen letter's bin
return $bins[$letter][array_rand($bins[$letter])];
}