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 case và 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 for trong php trước.Nội dung bao gồm:Vòng lặp là gì ?Vòng lặp forVòng lặp for lồng nhauVòng lặp for trong việc xử lý mảng
Trang 1Vòng l p for trong php ặ
N i dung chính ộ
• 1 Vòng l p là gì ?ặ
• 2 Vòng l p forặ
• 3 Vòng l p for l ng nhauặ ồ
• 4 Vòng l p for k t h p v i m ngặ ế ợ ớ ả
• 5 L i k tờ ế
1 Vòng l p là gì ? ặ
Vòng l p là m t mã l nh trong ó chặ ộ ệ đ ươn g 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 trongỏ ộ đ ề ệ đ ặ ộ ệ ơ ả l 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:
1
2
3
4
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.ộ ể ứ ệ đị đ ề ệ ỏ ặ
Trang 2• $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 logicử trong 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:
1
2
3
for($i= 0; $i< 10; $i++){
echo$i ' - ';
}
• $i = 0 là bi n i u khi n có giá tr kh i t o b ng 0ế đ ề ể ị ở ạ ằ
• $i < 10 là bi u th c i u ki n d ng vòng l p, có ý ngh a n uể ứ đ ề ệ ừ ặ ĩ ế $i < 10 thì 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ế đ ề ể ỗ ặ $i s 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ự ệ ế $i s ẽ đượ ă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ế $i s 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ế $i s 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.ị ở ặ
1
2
3
4
$i= 0;
for($i; $i< 10; $i++){
echo$i ' - ';
}
Trang 3ví 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 -”
1
2
3
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 :ụ
1
2
3
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 :ụ
1
2
3
4
5
6
7
8
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
Trang 4987
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 ngừ ụ ậ ấ ằ vòng l p for trong phpặ l 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:ộ ả
1
2
3
4
5
6
7
8
$sinhvien= array(
'Nguyễn A',
'Nguyễn B',
'Nguyễn C',
'Nguyễn D',
'Nguyễn E',
'Nguyễn F'
);
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ự ỉ ụ ấ ừ ầ ử
1
2
3
4
5
6
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ặ
Trang 52
3
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:ỉ ử ạ
1
2
3
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.ầ ế ẽ ố ư ơ
1
2
3
4
$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.ử ả