我使用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 ......
答案 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中,然后循环直到新样式与上一个样式不同。然后你会在每次执行时都与上一次不同。