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.
I like Chris Walsh's but here is an alternate that also works for associative arrays (non-integer indexes). Could probably be shortened:
foreach($mainArray as $main) {
if(($circ = current($circular)) === false) {
$circ = reset($circular);
}
next($circular);
echo "$main=$circ ";
}
If you need this more than once, maybe a function:
function circular(&$array) {
if(($result = current($array)) === false) {
$result = reset($array);
}
next($array);
return $result;
}
Then just use:
foreach($mainArray as $main) {
$circ = circular($circular);
echo "$main=$circ ";
}
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] . ', ';
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With