18

我有一系列短语。我想在循环中从数组中随机挑选短语。我不想在循环中多次选择相同的短语。我以为我可以随机选择短语,然后在下一个循环之前将其删除。

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

是否可以从每个循环的数组中随机选择不同的短语?

4

6 回答 6

44

随机排列数组,然后弹出最后一个元素。

$array = [...];

shuffle($array);

while($element = array_pop($array)){
  echo 'Random element:' . $element;
}
于 2013-06-14T14:26:14.033 回答
5

你也可以使用array_slice

$ran_Num = array_rand($phrases);
$ran_Phrase = array_slice($phrases, $ran_Num, 1);
于 2013-06-14T14:44:37.857 回答
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 );
于 2013-06-14T14:35:57.600 回答
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];

当您在数组上取消设置时,方括号内的值应该是您要删除的数组元素的索引,而不是值元素本身。括号内的变量已从 更改$ran_Phraseran_Num

    unset($phrases[$ran_Num]);
    echo $ran_Phrase."\r\n";
    echo count($phrases)."\r\n";
}
?>
于 2013-06-14T14:38:06.403 回答
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);
于 2013-06-14T14:27:28.143 回答
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');

  $ran_Num = array_rand(array_keys($phrases));
  $ran_Phrase = $phrases[$ran_Num];
  unset($phrases[$ran_Phrase]);
  echo $ran_Phrase . "\r\n";
  echo count($phrases) . "\r\n";
于 2021-12-02T09:46:31.313 回答