Reputation: 119
I have a number of days which is equal 10 and I have a array of week days "Monday", "Tuesday", "Wednesday", "Thursday", "Firday". Now I want to repeat this array 10 times. For example if days = 9 then the array will print out "Monday", "Tuesday", "Wednesday", "Thursday", "Firday", "Monday", "Tuesday", "Wednesday", "Thursday"
This is the code I've already tried
$days = 9;
$arr = array("Monday", "Tuesday", "Wednesday", "Thursday", "Firday");
foreach (range(1, $days) as $i) {
foreach ($arr as $value) {
echo $value . ', ';
}
}
The result I got back was
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
Monday, Tuesday, Wednesday, Thursday, Firday,
But the result I was expecting was
Monday, Tuesday, Wednesday,
Thursday, Firday, Monday, Tuesday, Wednesday, Thursday
Upvotes: 0
Views: 355
Reputation: 1502
You were iterating an array $days
times. You should iterating through the array $days
indexes.
$days = 13;
$arr = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
foreach (range(0, $days - 1) as $i) {
echo $arr[$i % 5] . ',';
};
Upvotes: 1
Reputation: 147146
You can just use a for
loop and the modulus operator %
to ensure your index doesn't exceed the range of the array:
$days = 9;
$arr = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
for ($i = 0; $i < $days; $i++) {
echo $arr[$i % 5] . ',';
}
Output:
Monday,Tuesday,Wednesday,Thursday,Friday,Monday,Tuesday,Wednesday,Thursday,
If you don't want the trailing comma, just add a test for the end of the loop before outputting it:
for ($i = 0; $i < $days; $i++) {
echo $arr[$i % 5] . ($i == $days - 1 ? '' : ',');
}
Output:
Monday,Tuesday,Wednesday,Thursday,Friday,Monday,Tuesday,Wednesday,Thursday
Upvotes: 1