GGio GGio - 5 months ago 11
PHP Question

Treat an array as circular array when selecting elements - PHP

I have an array on which I loop over. I have another array from which I need to select one by one but it needs to go on circle in case it gets to the end of the array. To make it clear here is some code:

$mainArray = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$size = count($mainArray);
$circular = array('A', 'B', 'C');

for($i = 0; $i < $size; $i++) {
echo $mainArray[$i] . ' = ' . $circular[$i] . ', ';
}


Now above code prints this:

1 = A, 2 = B, 3 = C, UNDEFINED INDEX ERROR


What I need it to print is this:

1 = A, 2 = B, 3 = C, 4 = A, 5 = B, 6 = C, 7 = A, 8 = B, 9 = C, 10 = A


Is there a built in function to PHP that turns an array into circular array? I think I need to use modular operator to achieve this.

Answer

Get the size of the circular array ($circsize)and then mod the value $i against it and use that as your index:

$mainArray = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$size      = count($mainArray);
$circular  = array('A', 'B', 'C');
$circsize  = count($circular);

for($i = 0; $i < $size; $i++) {
   echo $mainArray[$i] . ' = ' . $circular[$i % $circsize] . ', ';
}