php不断循环遍历数组

时间:2015-01-14 15:53:30

标签: php arrays

我想知道是否有一个内置于PHP中的函数可以用来循环遍历数组,并重置为开头以继续循环。

使用它将是使用PHP函数创建的SVG的颜色数组。我认为我的最大情况是X,但我想确保如果我有超过X我重新使用颜色代码。

下面是我的代码,但是想知道是否有内置函数来执行此操作。

$color_array = array( 1 => '#00cc00', 2=> '#B45F04', 3=> '#0101DF', 4=> '#B40486', 5=> 'F1F105', 6=>'F10505');
$num_color_array = count($color_array); //get number of elements

foreach(loop through array 1){ //psuedo code
    $array_color_index = 1; 

    foreach(loop throguh array 2){ //psuedo code
        if($array_color_index > $num_color_array){ 
            $array_color_index = 1; //if > num elements reset
        }
        $color_fill = $color_array[$array_color_index]; //pull the color code

        fill:'.$color_fill.' //use the color code here...simplified for example...

        $array_color_index++; //increment index     
    }
}

3 个答案:

答案 0 :(得分:1)

你可以使用这样的东西(使用模数):

$color_array = array('#f00', '#0f0', '#00f');
$elements = get_some_colorable_elements();
// For each element in $elements, the modulus returns a value between 0 and the size of $color_array
for ($i = 0; $i < count($elements); $i += 1) {
  $colorForElement = $color_array[$i % count($color_array)];
  fill_color_for_element($colorForElement);
}

据我所知,没有专门用于此目的的内置功能(模数除外)。

答案 1 :(得分:0)

尝试使用模数:

$color_fill = $color_array[$array_color_index % $num_color_array];

你得到你索引的剩余部分除以元素总数..所以当索引=元素数,余数= 0,然后循环。

答案 2 :(得分:0)

如果你遍历一个数组,然后再使用foreach()之类的东西再次开始,你基本上会创建一个无限循环。我不认为它有一个基本功能,但制作一个相当容易。当然,您必须使用BREAK来结束它。

这样的函数会做(它是一个Generator,所以你需要一个最新的PHP版本)

function constantLoop( $array ) {
  while(true) {
    foreach( $array as $element )  {
      yield $element;
    }
  }  
}

你可以像这样使用它:

foreach( constantLoop( $array ) as $value );

但是你必须打破,因为顾名思义,它会永远循环。