我有一系列短语。我想在一个循环中从数组中随机选择短语。 我不想在循环中选择相同的短语一次。 我以为我可以随机选择短语,然后在下一个循环之前将其删除。
<?php
for ($i=0; $i<16; $i++) {
$phrases = array(
'Hello Sailor', 'Acid Test', 'Bear Garden', 'Botch A Job',
'Dark Horse', 'In The Red', 'Man Up', 'Pan Out',
'Quid Pro Quo', 'Rub It In', 'Turncoat', 'Yes Man',
'All Wet', 'Bag Lady', 'Bean Feast', 'Big Wig',
);
$ran_Num = array_rand($phrases);
$ran_Phrase = $phrases[$ran_Num];
unset($phrases[$ran_Phrase]);
echo $ran_Phrase . "\r\n";
echo count($phrases) . "\r\n";
}
是否可以在每个循环中从数组中随机选择一个不同的短语?
答案 0 :(得分:31)
以随机顺序对数组进行随机播放,然后关闭最后一个元素。
$array = [...];
shuffle($array);
while($element = array_pop($array)){
echo 'Random element:' . $element;
}
答案 1 :(得分:3)
您也可以使用array_slice
$ran_Num = array_rand($phrases);
$ran_Phrase = array_slice($phrases, $ran_Num, 1);
答案 2 :(得分:0)
将所选值放置一个新数组,然后检查它是否存在于新数组中,如果不添加它。
<?php
$phrases = array('Hello Sailor','Acid Test','Bear Garden','Botch A Job','Dark Horse',
'In The Red','Man Up','Pan Out','Quid Pro Quo','Rub It In','Turncoat',
'Yes Man','All Wet','Bag Lady','Bean Feast','Big Wig');
$default = 16;
if($default > ($c = count($phrases))) $default = $c;
$keys = array_rand($phrases, $default);
$newPhrases = array();
foreach($keys as $key){
if(!isset($newPhrases[$key])){
$newPhrases[$key] = $phrases[$key];
}
}
print_r($newPhrases);
答案 3 :(得分:0)
您也可以使用array_rand和array_splice
$array = array('Hello Sailor','Acid Test','Bear Garden','Botch A Job','Dark Horse',
'In The Red','Man Up','Pan Out','Quid Pro Quo','Rub It In','Turncoat',
'Yes Man','All Wet','Bag Lady','Bean Feast','Big Wig');
$el = array_rand($array);
$dat = $array[$el];
array_splice($array, $el, 1 );
答案 4 :(得分:0)
此处的其他答案有效,但我想解决您的代码问题。
<?php
我在循环之外删除了$phrases
的定义。通过在循环中设置它,它每次都被重置,这是不好的。
$phrases = array('Hello Sailor','Acid Test','Bear Garden','Botch A Job','Dark Horse',
'In The Red','Man Up','Pan Out','Quid Pro Quo','Rub It In','Turncoat',
'Yes Man','All Wet','Bag Lady','Bean Feast','Big Wig');
我不喜欢数数,所以我让电脑去做。
for($i=0,$n=count($phrases); $i<$n; $i++){
$ran_Num = array_rand($phrases);
$ran_Phrase = $phrases[$ran_Num];
在数组上取消设置时,方括号内的值应该是要删除的数组元素的索引,而不是value元素本身。括号内的变量已从$ran_Phrase
更改为ran_Num
unset($phrases[$ran_Num]);
echo $ran_Phrase."\r\n";
echo count($phrases)."\r\n";
}
?>