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

时间:2012-09-01 15:29:27

标签: php

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

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

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

然后它会在一半的时间内返回香蕉,或者将船只的一半时间返回。

如何从这个数组中得到一个以给定字母开头的随机单词?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

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

function returnWithFirstLetter($words, $letter) {
    shuffle($words);
    foreach($words as $word)
        if($word[0] == $letter)
            return $word;
}

答案 2 :(得分: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])];

}