Php 随机选取数组中的元素,然后从数组中移除

Php 随机选取数组中的元素,然后从数组中移除,php,arrays,Php,Arrays,我有一系列的短语。我想在循环中从数组中随机选取短语。 我不想在循环中重复同一个短语。 我想我可以随机选择这个短语,然后在下一个循环之前删除它 以随机顺序洗牌数组,只需弹出最后一个元素 $array = [...]; shuffle($array); while($element = array_pop($array)){ echo 'Random element:' . $element; } 将所选值放置在新数组中,然后检查它是否存在于新数组中(如果不存在),然后添加它 <?

我有一系列的短语。我想在循环中从数组中随机选取短语。 我不想在循环中重复同一个短语。 我想我可以随机选择这个短语,然后在下一个循环之前删除它


以随机顺序洗牌数组,只需弹出最后一个元素

$array = [...];

shuffle($array);

while($element = array_pop($array)){
  echo 'Random element:' . $element;
}

将所选值放置在新数组中,然后检查它是否存在于新数组中(如果不存在),然后添加它

<?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 = 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
我不喜欢数数,所以我让电脑来做

for($i=0,$n=count($phrases); $i<$n; $i++){

    $ran_Num = array_rand($phrases);
    $ran_Phrase = $phrases[$ran_Num];
你也可以使用


使用类似于array\u pop的东西,它弹出并返回数组的最后一个值,将数组缩短一个元素。
在数组中
数组中
在循环中是个坏主意。我喜欢你做得更好。但这是一个选项。您可以取消权限-在开始时使用
array\u flip
一次,然后像这样搜索:
if(isset($phrases[$phrase]))
。它会快得多,尤其是在循环中:)我喜欢这种方法,简单明了。但唯一的问题是,你最终得到的是一个无序数组,因此这并没有涵盖所有用例。你能保证你删除的是从“返回切片”中选取的一个吗?对不起,我没有抓住要点
array_rand()
返回索引数组的索引,而不是索引处的值。
for($i=0,$n=count($phrases); $i<$n; $i++){

    $ran_Num = array_rand($phrases);
    $ran_Phrase = $phrases[$ran_Num];
    unset($phrases[$ran_Num]);
    echo $ran_Phrase."\r\n";
    echo count($phrases)."\r\n";
}
?>
$ran_Num = array_rand($phrases);
$ran_Phrase = array_slice($phrases, $ran_Num, 1);