1

我在 PHP 中包含 20 个单词的数组。有没有办法从这个数组中提取一个以特定字母开头的随机单词?

例如,如果我想要一个以 B 开头的单词,请说。

$arr=array('apple','almond','banana','boat','carrot');

然后它会一半时间返回香蕉,或一半时间乘船。

如何从该数组中获取以给定字母开头的随机单词?

4

3 回答 3

3

以下甚至适用于选择符合条件的单词的方法,这些方法比“检查第一个字母”更复杂,并且不依赖于例如所有符合条件的单词在数组中是连续的。

$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;
于 2012-09-01T15:41:26.983 回答
2

这应该有效。在对数组进行洗牌后,每个以“B”或任何字母开头的单词将有随机机会成为洗牌数组中的第一个。依赖 PHP 的 shuffle() 可能比我们自己的实现更高效、更快。

function returnWithFirstLetter($words, $letter) {
    shuffle($words);
    foreach($words as $word)
        if($word[0] == $letter)
            return $word;
}
于 2012-09-01T16:18:32.830 回答
0

又快又脏,给你:

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

}
于 2012-09-01T15:37:36.523 回答