如何配置php“array_rand”不能给出2个相同的结果?

时间:2011-10-20 16:42:36

标签: php arrays random

我使用php array_rand从数组中选择1个随机记录,例如:

$style_class = array("st_style1","st_style2","st_style3","st_style4");
$random_class = array_rand($style_class, 1);
$div_class = $style_class[$random_class];

问题在于,有时它会多次给出相同的记录,因为我只使用4条记录,所以它经常安静(使用“array_rand”不是必需的)。

示例:

st_style1, 的 st_style2, st_style2, st_style2, st_style4, st_style2 ...

有没有办法解决这个问题,所以两条相同的记录不会连续两次显示。

例如

st_style2,st_style4,st_style2,st_style1,st_style3,st_style2,st_style1 ......

3 个答案:

答案 0 :(得分:4)

最简单的解决方案是跟踪最新的一个并保持随机调用,直到你得到不同的东西。类似的东西:

$style_class = array("st_style1","st_style2","st_style3","st_style4");
$styles = array()
$lastStyle = -1
for($i = 0; $i < 5; $i++) {
    while(1==1) {
        $newStyle = array_rand($style_class, 1);
        if ($lastStyle != $newStyle) { 
            $lastStyle = $newStyle;
            break;
        }
    }
    $div_class = $style_class[$lastStyle]
    $styles[] = $div_class
}

然后按顺序使用$styles[]数组。它不应该有任何重复

答案 1 :(得分:2)

James J. Regan IV's answer基本相同,但使用do-while loop

像这样设置数组:

$style_class = array("st_style1","st_style2","st_style3","st_style4");
$prev_class = -1;

然后,获得一个随机类:

do {
    $random_class = array_rand($style_class, 1);
} while ($random_class == $prev_class);
$div_class = $style_class[$prev_class = $random_class];

编辑替代解决方案,没有循环:

$style_class = array("st_style1","st_style2","st_style3","st_style4");
$random_class = array_rand($style_class);

获取新的随机类:

$random_class += rand(1, count($style_class)-1);
$div_class = $style_class[$random_class % count($style_class)];

只要数组键是从零开始的连续整数(如果使用array()定义它并且没有明确指定任何键),则此方法有效。

答案 2 :(得分:1)

将最后一个样式保存在var中,然后循环直到新样式与上一个样式不同。然后你会在每次执行时都与上一次不同。