© 2017 Pblog.TK Nhận Thiết Kế Wap/Web Giá Rẻ. Inbox - 01226209308 !!

Vòng lặp for trong php - vòng lặp for lồng nhau

Đăng Cách đây 8 tháng bởi Poker |

Vậy là ta đã học xong hai lệnh rẻ nhánh rất quan trọng trong lập trình php đó là câu lệnh switch casevà câu lệnh if else. Vậy thì trong bài này ta sẽ bắt đầu tìm hiểu một khái niệm mới hơn đó là vòng lặp, và ta sẽ tìm hiểu khái niệm vòng lặp fortrong phptrước.

Nội dung bao gồm:

*.Vòng lặp là gì ?

*.Vòng lặp for

*.Vòng lặp for lồng nhau

*.Vòng lặp for trong việc xử lý mảng
1. Vòng lặp là gì ?

Vòng lặp là một mã lệnh trong đó chương trình được thực hiện lặp đi lặp lại nhiều lần cho đến khi thỏa một điều kiện nào đó. Vòng lặp là một khái niệm cơ bản tronglập trình cấu trúc.

Trong PHP có các vòng lặp sau:

*. Vòng lặp for

*. Vòng lặp while và do while

*. Vòng lặp foreach

2. Vòng lặp for

Cú pháp:

Copy Code
for($bien_dieu_khien;$bieu_thuc_dieu_kien;$bieu_thuc_thay_doi_bien_dieu_khien) { // lệnh }

Trong đó:

*. $bien_dieu_khien: là một câu lệnh gán giá trị ban đầu cho biến điều khiển trước khi thực hiên vòng lặp, hoặc là một biến có giá trị sẵn mà ta đã truyền vào cho nó trước khi tạo vòng lặp này, lệnh này được thực hiện duy nhất một lần.

*.$bieu_thuc_dieu_kien: là một biểu thức quan hệ xác định điều kiện thoát khỏi vòng lặp.

*.$bieu_thuc_thay_doi_bien_dieu_khien: Xác định biến điều khiển sẽ bị thay đổi như thế nào sau mỗi lần lặp được lặp lại (thường là tăng hoặc giảm giá trị của biến điều khiển).

Ba biểu thức trên được cách nhau bởi dấu chấm phẩy, vòng lặp sẽ lặp khi biểu thức điều kiện đúng, khi biểu thức điều kiện sai thì vòng lặp sẽ dừng và thoát, và ta sử dụng các toán tử quan hệ và toán tử logictrong các biểu thức điều kiện để điều khiển vòng lặp.

Xét ví dụ dưới đây:

Copy Code
for($i= 0;$i< 10;$i ){ echo $i.' - '; }

*.$i = 0là biến điều khiển có giá trị khởi tạo bằng 0

*.$i < 10là biểu thức điều kiện dừng vòng lặp, có ý nghĩa nếu$i < 10thì vòng lặp vẫn tiếp tục, ngược lại nếu$i >= 10thì biểu thức sai nên vòng lặp sẽ thoát

*.$i là biểu thức thay đổi biến điều khiển, sau mỗi vòng lặp$isẽ tăng lên 1

Bước lặp 1:$i = 0, biểu thức điều kiện sẽ thành(0 < 10) => true=> vòng lặp được thực hiện và xuất ra màn hình chuỗi “0 -”. Sau khi thực hiện hết các lệnh bên trong vòng lặp thì biểu thức thay đổi điều kiện được thực hiện nên biến$isẽ được tăng lên 1 nên lúc này$i = 1.

Bước lặp 2:$i = 1, biểu thức điều kiện sẽ thành(1 < 10) => true=> vòng lặp được thực hiện và xuất ra màn hình chuỗi “1 – “. Kết hợp với chuỗi ở vòng lặp 1 lúc này màn hình sẽ xuất hiện chuỗi “0 - 1 -”. Sau khi các lệnh bên trong vòng lặp thực hiện xong biểu thức thay đổi điều kiện thực hiện nên biến$isẽ tăng lên 1 nên lúc này$i = 2.

Tương tự cho các bước lặp 3, 4, 5, 6, 7, 8, 9.

Bước lặp 10: $i = 10, biểu thức điều kiện sẽ thành(10 < 10) => false=> vòng lặp kết thúc. Lúc này biến$isẽ giữ nguyên và không tăng lên nữa nên giữ nguyên giá trị 10.

Kết thúc: Màn hình xuất ra chuỗi “0 – 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – ”.

Với ví dụ trên thì ta có thể viết lại như sau và kết quả trả về là giống nhau, chỉ khác nhau ở chỗ biến$iđược gán giá trị ở ngoài vòng lặp.

Copy Code
$i= 0; for($i;$i< 10;$i ){ echo $i.' - '; }

Ở ví dụ trên thì biểu thức thay biến điều khiển là tăng dần, ở ví dụ dưới đây biểu thức điều khiển sẽ giảm dần và kết quả sẽ in ngược lại “9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 -”.

Copy Code
for($i= 9;$i>= 0;$i--){ echo $i.' - '; }

Trong thân vòng lặp ta có thể thêm những biểu thức bằng cách dùng dấu phảy để ngăn cách chúng.

Ví dụ:

Copy Code
for($i= 9,$count= 10;$i<=$count;$i--){ echo $i.' - '; }

3. Vòng lặp for lồng nhau

Giống như câu điều kiện if, vòng lặp for trong php có thể lồng nhau để xử lý bài toán. Ở mỗi vòng lặp cha thì vòng lặp con sẽ được thực hiện (vòng lặp con lặp cho đến hết), điều này tuân thủ theo quy tắc phải thực hiện hết nội dung dòng lệnh bên trong vòng lặp mới thực hiện vòng kế tiếp.

Ví dụ:

Copy Code
for($i= 1;$i< 10;$i ) { for ($j= 9;$j>=$i;$j--) { echo $j; } echo '<br/>';; }

Bài toán này xuất ra màn hình một tam giác:

987654321

98765432

9876543

987654

98765

9876

987

98

9

Tổng số lần lặp chính là bằng tích số lần lặp của 2 vòng lặp cộng thêm số lần lặp của vòng lặp cha. Ví dụ vòng lặp 1 lặp 10 lần, vòng lặp 2 lặp 10 lần thì tổng số vòng lặp sẽ là 10 x 10 10 = 110 lần. Vì thế chi phí để vòng lặp for lặp lồng nhau rất cao.

4. Vòng lặp for kết hợp với mảng

Từ ví dụ trên ta nhận thấy rằngvòng lặp for trong phplặp một cách trình tự tăng hoặc giảm đều, điều này giống với các chỉ mục trong mảng. Vậy ta nhận xét rằng có thể dùng vòng lặp để truy xuất từng phần tử của mảng.

Ví dụ:Cho một mảng các sinh viên:

[code]$sinhvien=array(

'Nguyễn A',

'Nguyễn B',

'Nguyễn C',

'Nguyễn D',

'Nguyễn E',

'Nguyễn F'

);[code]

Hãy xuất các sinh viên trong mảng ra màn hình ?

Cách 1: Dựa vào chỉ mục xuất ra từng phần tử

Copy Code
echo$sinhvien[0]; echo$sinhvien[1]; echo$sinhvien[2]; echo$sinhvien[3]; echo$sinhvien[4]; echo$sinhvien[5];

Cách 2:Dùng vòng lặp for

Copy Code
for($i= 0;$i< 6;$i ){ echo $sinhvien[$i]; }

Nhìn vào bài giải các bạn có biết tại sao chỉ mục lại bắt đầu bằng 0 ? Tại vì trong mảng phần tử đầu tiên có ví trí số 0, và phần tử cuối cùng có vị trí (n-1). Trong đó n là tổng số phần tử.

Với cách giải thứ 2 ta có thể biến đổi một chút là dùng hàm count() để đếm tổng số phần tử và lặp, như vậy dù trong mảng sinh viên có bao nhiêu phần tử đi nữa thì vẫn không ảnh hưởng gì đến code. Nếu ta không làm vậy thì giả sử ta xóa danh sách sinh viên còn xuống 3 sinh viên thì với cách 2 sẽ thông báo lỗi ngay, còn cách dưới đây sẽ không có lỗi.

Cách 2 chỉnh sửa lại:

Copy Code
for($i= 0;$i<count($sinhvien);$i ){ echo $sinhvien[$i]; }

Xét về độ tối ưu thì cách này vẫn chưa tối ưu vì hàm count ta để ngay trong thân vòng lặp, như vậy mỗi lần lặp nó phải đếm tổng số phẩn tử của mảng. mảng có 10 phần tư thì nó đếm 10 lần, 20 phần tử thì nó đếm 20 lần. Trong khi thực tế ta chỉ cần đếm 1 lần. vì thế cách sau sẽ tối ưu hơn.

Copy Code
$count=count($sinhvien); for($i= 0;$i<$count;$i ){ echo $sinhvien[$i]; }

Đối với mảng 2 chiều chúng ta phải dùng vòng lặp lồng 2 cấp để xử lý, vấn đề này sẽ được đề cập trong bài xử lý mảng trong php.

Bình Luận Bài Viết

Cùng Chuyên Mục