php重复循环无限

时间:2017-09-11 15:50:35

标签: php arrays loops

我试图实现一些简单的事情,比如为每个元素重复颜色。

这是我的功能:

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个项目,因此循环必须能够无限运行。

4 个答案:

答案 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)

借助InfiniteIterator

获得乐趣的任何借口
<?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