我在 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])];
}