我在PHP中有20个单词的数组。有没有办法从这个以特定字母开头的数组中提取一个随机单词?
例如,如果我想要一个以B开头的单词。
$arr=array('apple','almond','banana','boat','carrot');
然后它会在一半的时间内返回香蕉,或者将船只的一半时间返回。
如何从这个数组中得到一个以给定字母开头的随机单词?
答案 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])];
}