你沒有采摘在每次迭代中隨機顏色,你實際上已經把它的循環之外。我已經將它移到了你的循環中。
$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