Ответ 1
Перемешивайте массив в произвольном порядке и просто вытащите последний элемент.
$array = [...];
shuffle($array);
while($element = array_pop($array)){
echo 'Random element:' . $element;
}
У меня есть ряд фраз. Я хотел бы случайным образом выбирать фразы из массива в цикле. Я не хочу выбирать одну и ту же фразу более одного раза в цикле. Я думал, что могу случайно выбрать фразу, а затем удалить ее до следующего цикла.
<?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";
}
?>
Можно ли случайным образом выбрать другую фразу из массива в каждом цикле.
Перемешивайте массив в произвольном порядке и просто вытащите последний элемент.
$array = [...];
shuffle($array);
while($element = array_pop($array)){
echo 'Random element:' . $element;
}
Вы также можете использовать array_slice
$ran_Num = array_rand($phrases);
$ran_Phrase = array_slice($phrases, $ran_Num, 1);
Поместите выбранные значения в новый массив и проверьте, существует ли он в новом массиве, если он не добавлен.
<?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);
Вы также можете использовать 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 );
Другие ответы здесь работают, но я хочу обратиться к вашему коду.
<?php
Я вывел определение $phrases
вне цикла. Установив его внутри цикла, он был reset каждый раз и ничего хорошего.
$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];
Когда вы отключите массив, значение, которое входит в квадратные скобки, должно быть индексом элемента массива, который вы хотите удалить, а не элементом значения. Переменная внутри скобок была изменена с $ran_Phrase
на ran_Num
unset($phrases[$ran_Num]);
echo $ran_Phrase."\r\n";
echo count($phrases)."\r\n";
}
?>