2015-01-14 105 views
0

我想知道是否有一個內置於PHP的函數,可以用來循環訪問數組,並重置爲開始以繼續循環。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  
    } 
} 
+6

聽起來像一個'while'循環的完美情況 – sjagr

+0

我害怕使用while循環會比上面所述的處理能力更強。 – sweaty

回答

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); 
} 

據我知道有沒有內置的功能專門爲此(比模量等)。

+0

完美!謝謝。 – sweaty

0

嘗試使用模:

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

你得到你的指數由元素的總數所得的餘數..所以當元素的索引=數,餘數= 0,然後它循環。

0

如果你循環訪問一個數組,然後再次使用類似foreach()的方法從頭開始,那麼本質上就是創建一個無限循環。我不認爲它有一個基本的功能,但做起來相當容易。當然,你必須使用BREAK來結束它。

這樣的功能會做(這是一個發電機,所以你需要一個最新的PHP版本)

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

您可以使用它像這樣:

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

但你必須因爲正如名稱所說,它會永遠循環。

+0

我應該特別呼籲,兩個foreach循環通過不同的數組而不是顏色數組,因此它們將自行終止。 – sweaty