Chạy một vòng lặp n lần (n là số nguyên dương).

1. Vòng lặp for

Vòng lặp cơ bản nhất và thường được dùng nhất khi giải quyết vấn đề trên, nhưng lại là vòng lặp hay gặp lỗi nhất vì:

  1. Dùng phép so sánh làm điều kiện dừng vòng lặp, dễ gây nhầm lẫn < <= > >=
  2. Phải khởi tạo giá trị bắt đầu và quyết định số bước nhảy ngay cả khi không cần thiết (thường là +=1)
  3. Syntax khá rườm rà

Trong trường hợp muốn kết thúc vòng lặp khi giá trị của i bằng n ta phải đổi giá trị khởi tạo của i là 1 và thay < bằng <=:

Nếu bạn không tăng giá trị khởi tạo của i lên 1 thì  vòng lặp sẽ chạy từ 0 đến 100 (101 lần) là sai đề bài. Trong trường hợp các bước nhảy (step) của i khác 1, hãy xét đoạn code này:

Nếu ta thay n bằng 99, vòng lặp trên vẫn chạy 50 lần. Như vậy không những sai đề bài mà còn chạy số lần không nhất quán với n.

Để giải quyết vấn đề này thì ta hãy dùng $i < $n * $step thay vì dùng điều kiện $i < $n:

2. Vòng lặp while

Một thời gian dài tôi thích dùng while, đơn giản vì nó trông nguy hiểm hơn :))

Cần chú ý là $i++ và ++$i sẽ cho ra kết quả khác nhau:

Lý do của sự khác nhau này là ở lần so sánh cuối cùng, ++$i có giá trị là 100 (cộng trước khi so sánh) cho nên không thoả mãn điều kiện $i < $n.

Một cách thông minh hơn để sử dụng while là đi ngược từ n về 0:

3. Kết hợp foreach và range

foreach chủ yếu được dùng để duyệt mảng, cho nên ta sẽ dùng kết hợp với mảng để giải quyết bài toán trên, và tôi thực sự thích dùng cách này nhất.

Để dễ hiểu hơn tôi sẽ nói một chút về hàm range, cách sử dụng hàm range như sau:

Như vậy thì đoạn code phía trên sẽ duyệt mảng 100 item [1,2,3,...100].

Lý do tôi thích cách này vì nó ít code hơn, ít gây nhầm lẫn do loại bỏ đươc phép so sánh và đặc biệt có thể đặt số bước ngay bên trong hàm range khi cần thiết. Ví dụ với step bằng 6 ta có đoạn code dưới đây:

Cần chú ý là cách kết hợp foreach và range này cho performance không cao, vì phải tạo ra 1 mảng gây tốn bộ nhớ, nhất là khi đó là một mảng cực lớn. Tuy vậy range sẽ không tạo lại 1 mảng mới sau mỗi vòng lặp. Cho nên bạn không cần phải gọi hàm range ở ngoài biểu thức đâu nhé. Ví dụ như dưới đây:

Bài viết đến đây là hết. Hãy comment cách mà bạn hay dùng ở phía dưới nhé.