fuzzy buddy
fuzzy buddy

Reputation: 119

How to repeat a array a certain amount of times

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

Answers (2)

Cloud Soh Jun Fu
Cloud Soh Jun Fu

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

Nick
Nick

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

Demo on 3v4l.org

Upvotes: 1

Related Questions