Случайно выберите элемент в массиве, затем удалите из массива

У меня есть множество фраз. Я хотел бы случайным образом выбирать фразы из массива в цикле. Я не хочу выбирать одну и ту же фразу более одного раза в цикле. Я думал, что могу случайно выбрать фразу, а затем удалить ее до следующего цикла.

http://codepad.org/11l0nStX

<?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"; } ?> 

Можно ли случайным образом выбрать другую фразу из массива в каждом цикле.

Solutions Collecting From Web of "Случайно выберите элемент в массиве, затем удалите из массива"

Перемешайте массив в случайном порядке и просто вытащите последний элемент.

 $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); 

Вы также можете использовать 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 вне цикла. Установив его внутри цикла, он каждый раз сбрасывается, и это не хорошо.

 $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"; } ?> не  unset($phrases[$ran_Num]); echo $ran_Phrase."\r\n"; echo count($phrases)."\r\n"; } ?> 

Поместите выбранные значения в новый массив и проверьте, существует ли он в новом массиве, если он не добавлен.

 <?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);