如何从PHP中的数组中获取以给定字母开头的随机单词?
我在PHP中创建了一个由20个单词组成的数组。有没有办法从这个数组中提取一个以特定字母开头的随机单词 例如,如果我想要一个以B开头的单词,说如何从PHP中的数组中获取以给定字母开头的随机单词?,php,Php,我在PHP中创建了一个由20个单词组成的数组。有没有办法从这个数组中提取一个以特定字母开头的随机单词 例如,如果我想要一个以B开头的单词,说 $arr=array('apple','almond','banana','boat','carrot'); 然后它会一半时间返回香蕉,一半时间返回船 如何从该数组中获取以给定字母开头的随机单词?快速和肮脏,给你: function returnRandomWithLetter($words, $letter) { // put all wor
$arr=array('apple','almond','banana','boat','carrot');
然后它会一半时间返回香蕉,一半时间返回船
如何从该数组中获取以给定字母开头的随机单词?快速和肮脏,给你:
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])];
}
快脏,给你:
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])];
}
以下方法甚至适用于选择合格词的方法,这些方法比仅检查第一个字母更复杂,并且不依赖于数组中所有合格词的连续性
$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;
以下方法甚至适用于选择合格词的方法,这些方法比仅检查第一个字母更复杂,并且不依赖于数组中所有合格词的连续性
$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;
}
这应该行得通。在洗牌数组后,以“B”或任何字母开头的每个单词都有随机机会成为洗牌数组中的第一个。依靠PHP的shuffle可能比我们自己的实现更高效、更快
function returnWithFirstLetter($words, $letter) {
shuffle($words);
foreach($words as $word)
if($word[0] == $letter)
return $word;
}
你可以使用in_数组函数。如果数组是硬编码的,那么你可以在数组中按字母组合单词,例如“b”=>数组“香蕉”、“船”。。。然后只需数组_rand$arr[$letter];你可以使用in_数组函数。如果数组是硬编码的,那么你可以在数组中按字母组合单词,例如“b”=>数组“香蕉”、“船”。。。然后只需数组_rand$arr[$letter];您可以直接使用$word[0]而不是调用substr。@Wiseguy更快、更脏,将进行编辑。我怎么能不相信另一个查理·布朗!说得好,恰克。如果你想要最快和最脏的,我可以用两行回答这个问题,可能一行,但在某个点上,它变得比快速更脏。有时可读性仍然很好-除了调用substr,您还可以直接使用$word[0]。@Wiseguy更快更脏,将进行编辑。我怎么能不相信另一个查理·布朗!说得好,恰克。如果你想要最快和最脏的,我可以用两行回答这个问题,可能一行,但在某个点上,它变得比快速更脏。有时可读性仍然很好-普尼斯!澄清一下,当您运行这个php函数时,会这样使用它吗?返回第一个字母$somearray,b?是;这就是使用它的方法很好!澄清一下,当您运行这个php函数时,会这样使用它吗?返回第一个字母$somearray,b?是;这就是使用它的方法