Như ta đã biết, câu lệnh if else dùng để kiểm tra và rẽ nhánh cách mệnh đề của bài toán. Nhưng không phải nó là duy nhất. Trong php có câu lệnh khác đó là lệnh rẻ nhanh switch case.
Bài 06: Câu lệnh switch case trong php
Trong bài này ta sẽ tìm hiểu ba vấn đề chính:
- 1. Câu lệnh switch trong PHP.
- 2. Switch và if.
- 3. Switch lồng nhau.
1. Câu lệnh switch trong PHP
Câu lệnh switch trong php cho phép chúng ta, đưa ra quyết định có nhiều cách lựa chọn để giá trị của biểu thức truyền vào. Nếu giá trị biểu thức truyền vào trùng với các giá trị biểu thức điều kiện thì các câu lệnh bên trong biểu thức điều kiện sẽ được thực hiện.
Cú pháp:
Ở trong đó lệnh switch, case và default là các từ khóa trong PHP. Chuỗi câu lệnh có thể là lệnh đơn (1 lệnh) hay lệnh ghép (kết hợp nhiều lệnh). và không cần đặt trong cặp dấu ngoặc nhọn {}. Ở mỗi dòng lệnh lựa chọn (case). Nó sẽ so sánh xem biến truyền vào $variable
có bằng với biến điều kiện $value_1, $value_2
hay không.
Nếu trùng với case thì những câu lệnh bên trong case đó sẽ được thực hiện và đồng thời dòng lệnh break sẽ kết thúc câu lệnh switch. Nếu không có lựa chọn (case) nào đúng thì nó sẽ mặc định chạy vào chuỗi dòng lệnh trong default. Lệnh default trong mệnh đề rẻ nhánh switch có thể có hoặc không.
Mỗi giá trị ở case chỉ chấp nhận các kiễu dữ liệu string, INT, boolean, null, foat. hoặc là một biểu thức có kết quả trả về một trong năm loại dữ liệu đó. Cùng với đó toán tử quan hệ so sánh trong switch luôn luôn là ==
.
Ví dụ: Viết chương nhập vào một số, dùng lệnh rẻ nhánh switch kiểm tra số đó nếu:
Giải thích:
- 1: Biểu thức truyền vào là biến
$number
có giá trị = 10. - 2: Ở case thứ nhất điều kiện là
$number = 0
thì mới thực hiện. Mà $number = 10 nên không thỏa điều kiện. - 3: Tương tự cho các lệnh case còn lại đều không thỏa điều kiện.
- 4: Đến lệnh default, đây là lệnh được thực hiện khi các lênh case trên không có cái nào thỏa điều kiện nên trên màn hình sẽ xuất hiện chữ “Không tìm thấy”.
Giả sử ta nhập biên $number = 2
, bài toán trên sẽ được giải thích như sau:
- 1 : Nhập
$number = 2
. - 2 : Ở đây case thứ nhất không thỏa điều kiện vì 2 khác 0 nên chương trình sẽ qua Case tiếp theo.
- 3 : Ở đây case thứ 2 vẫn không thỏa điều kiện vì 2 khác 1, nên chương trình sẽ qua Case tiếp theo.
- 4 : Ở đây case thứ 3 này thỏa điều kiện vì 2 bằng 2. Lúc này chương trình sẽ chạy vào các câu lệnh bên trong nên xuất ra màn hình chữ ‘Số hai’. Cùng lúc dòng Break dừng luôn cả chương trình rẻ nhánh này vì đã thỏa mãn. Kết thúc chương trình.
2. Switch và if
Lệnh If và lệnh Switch là 2 dạng lệnh rẻ nhánh trong PHP. Tuy nhiên lệnh if vẫn linh hoạt hơn switch và tốc độ cũng nhanh hơn. Với những bài toán ta thể hiện bằng switch thì hoàn toàn có thể chuyển thành if. Ngược lại những bài toán ta dùng lệnh if để thể hiện, thì chưa chắc đã chuyển qua lệnh switch được.
Với bài toán trên ta thể hiện bằng câu lệnh if như sau:
3. Switch lồng nhau
Cũng như lệnh if, lệnh switch cũng có thể lồng nhau.
3. Lời kết
Trong bài học lập trình PHP này hy vọng các bạn hiểu được, cách sử dụng lệnh switch case trong php và có những quyết định sáng suốt trong việc lựa chọn giữa lệnh switch và lệnh if. Trong bài học tới chúng ta sẽ nghiên cứu về vòng lặp. Có 4 loại vòng lặp trong php nhưng chúng ta nghiên cứu vòng lặp for trước.
Bài 07: Vòng lặp for trong php
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.
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 trong lập trình cấu trúc.
Trong PHP có các vòng lặp sau:
- Vòng lặp for ta sẽ học trong bài này.
- Kế tiếp sẽ là vòng lặp while và do while ta sẽ học ở bài 8.
- Và cuối cùng là vòng lặp foreach phần này bạn sẽ học ở bài 9.
2. Vòng lặp for
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 lại 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:
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.
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.
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.
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ằ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:
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ử
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 chúng 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:
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.
Đố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.
5. Lời kết
Trong bài học này các bạn đã được học vòng lặp for trong php. Một vòng lặp rất thông dụng trong các ngôn ngữ. Trong thực tế vòng lặp được sử dụng rất nhiều nên các bạn phải nắm vững để có thể lựa chọn cái nào cho phù hợp. Bài tiếp theo chúng ta sẽ nghiên cứu vòng lặp while và do while.
0 Lời bình