2014-03-27 22 views
2

我有以下代码用于在每次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

其中两个项目并排结束侧。

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

UPDATE

我虽然这件事,但我不知道在那里用它去:

<?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; ?>"> 
+1

为什么你不能使用洗牌功能......? – user1844933

+0

从来没有听说过它... – user3367639

+0

我试过了,每一个都以相同的变量结束。 – user3367639

回答

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

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

0

只是删除当前选中的数组项和重新排序阵列 How to Remove Array Element and Then Re-Index Array?

+0

我没有两个数组,并且不能硬编码另一个数组,因为我永远不知道在foreach语句中会有多少结果。实际上,将代码放在代表我的代码的答案中,我会给它一个镜头。 – user3367639