防止随机数组的相同选择

时间:2014-03-27 07:05:30

标签: php arrays

每次foreach遍历它的循环时,我都有以下代码用于从数组中选择一个随机项。

<?php $variables = array('success', 'warning', 'info', 'danger'); ?>
   <?php foreach($os->list as $list): $var = 'success'; ?>
      <div class="progress-bar progress-bar-<?php echo $variables[array_rand($variables)]; ?>" style="width: <?php echo $list->metrics->visits; ?>%" title="<?php echo $list->os.' '.$list->version; ?>">
         <span class="sr-only"><?php echo $list->metrics->visits; ?>%</span>
       </div>
    <?php endforeach; ?>

我唯一的问题是,有一次它选择success,然后下次选择success时,你无法区分数据。如果它选择了以下内容我会没事的。

success, info, danger, success, danger, info

不是:

success, info, info, danger, success, success

两个项目并排结束的地方。

有没有办法做到这一点,还是我在浪费时间?

更新

我虽然这样,但我不知道该去哪里:

<?php foreach($os->list as $list): $var = 'success'; ?>
   <?php
    if($var){

      $var1 = $var;

      $var = $variables[array_rand($variables)];

      if($var == $var1){


      }
     }
   ?>
   <div class="progress-bar progress-bar-<?php echo $var; ?>" style="width: <?php echo $list->metrics->visits; ?>%" title="<?php echo $list->os.' '.$list->version; ?>">

2 个答案:

答案 0 :(得分:0)

只需删除当前选定的数组项并重新排序该数组 How to Remove Array Element and Then Re-Index Array?

答案 1 :(得分:0)

尝试这样的事情

$a = array('success', 'info', 'danger', 'warning');
$temp = array();

for ($i = 0; $i < 10; $i++) {
    $idx = array_rand($a);
    $result = $a[$idx];
    unset($a[$idx]);
    $a = array_merge($a, $temp);
    $temp = array();
    echo $result."\n";
    $temp[] = $result;
}

这会将最后选定的元素移出数组,并在下一次迭代选择随机元素后将其移回。