你没有采摘在每次迭代中随机颜色,你实际上已经把它的循环之外。我已经将它移到了你的循环中。
$array = array('a', 'b', 'c', 'd', 'e');
$colors = array('#61AE24', '#EAE672', '#00A1CB', '#E54028', '#E59B28', '#28E4E5', '#DB28E5');
$lastcolor = NULL;
foreach($array as $val) {
while (empty($color) || $color == $lastcolor) {
$color = $colors[array_rand($colors)];
}
$lastcolor = $color;
echo '<div style="color: '.$color.';">'.$val.'</div>';
}
有几件事情需要注意:
$lastcolor
是在循环外部定义,因此它迭代之间仍然存在
- 我们设置了
$color
,那么$color
是对$lastcolor
检查,分配新随机颜色,直到他们不匹配
- 最后,
$lastcolor
设置为您的新颜色为下一次迭代检查
另一替代解决方案是从$colors
在临时数组中删除最后的颜色:
$array = array('a', 'b', 'c', 'd', 'e');
$colors = array('#61AE24', '#EAE672', '#00A1CB', '#E54028', '#E59B28', '#28E4E5', '#DB28E5');
$lastcolor = NULL;
foreach($array as $val) {
$temp_colors = $colors;
if (($key = array_search($lastcolor, $temp_colors)) !== false) {
unset($temp_colors[$key]);
}
$color = $temp_colors[array_rand($temp_colors)];
$lastcolor = $color;
echo '<div style="color: '.$color.';">'.$val.'</div>';
}
第一个解决方案是更可能具有更好的性能,假定在while
循环迭代的次数不超过$colors
中的元素数量。
所以你只是想,你不能在一排接一值的两倍? – Rizier123
是的,很好解释! – Kobi
然后你可能想要使用'$ _SESSION'数组,如果你想通过多个请求来做到这一点。 – Rizier123