2015-01-14 3 views
0

Мне интересно, есть ли встроенная в PHP функция, которую я мог бы использовать для цикла через массив и сбрасывать в начало, чтобы продолжить цикл снова.php непрерывный цикл через массив

Использование этого будет массивом цветов для SVG, который создается с помощью функции PHP. Я думаю, что мой максимальный случай будет 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

Смежные вопросы