我试图实现一些简单的事情,比如为每个元素重复颜色。
这是我的功能:
function colors() {
$colorArray = array('#f44336', '#9c27b0', '#e91e63');
return $colorArray[array_rand($colorArray)];
}
<ul>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
<li style="color:<?php echo colors(); ?>"><span>Word</span></li>
</ul>
这个工作正常,但我不想有随机颜色,而是从数组中重复前3种颜色。我可以拥有多达500个项目,因此循环必须能够无限运行。
答案 0 :(得分:1)
如果要替换三种颜色,则需要记录最后使用的颜色。以下是对函数的简单修改,需要使用static
变量:
function colors() {
static $colorCounter = -1;
$colorArray = array('#f44336', '#9c27b0', '#e91e63');
$colorCounter++;
return $colorArray[$colorCounter % count($colorArray)];
}
以下是示例输出(三种颜色无限重复): https://eval.in/859522
答案 1 :(得分:1)
使用CSS。
li:nth-child(3n+1) {color: #f44336;}
li:nth-child(3n+2) {color: #9c27b0;}
li:nth-child(3n+3) {color: #e91e63;}
更清洁:p
答案 2 :(得分:0)
创建一个全局变量,以便在每次使用时存储索引。在每次迭代期间递增该变量 - 如果大于数组的计数返回到零。
// Create a global variable
$current_color = -1;
function colors() {
// Access global var
global $current_color;
// Array of colors
$colorArray = array('#f44336', '#9c27b0', '#e91e63');
// Increment global var
$current_color++;
// Return to zero if var is greater than the count of your array
$current_color = ( $current_color < count( $colorArray ) ) ? $current_color : 0;
// Return color
return $colorArray[$current_color];
}
答案 3 :(得分:0)
<?php
class Colors
{
private $infinite;
public function __construct(array $colors)
{
$this->infinite = new InfiniteIterator(new ArrayIterator($colors));
$this->infinite->rewind();
}
public function get()
{
$return = $this->infinite->current();
$this->infinite->next();
return $return;
}
}
$colors = new Colors(['#111', '#222', '#333']);
只要您想要颜色,只需致电echo $colors->get()
即可。见https://eval.in/859523