Ở bài trước ta đã học về các loại vòng lặp như for, while, do while các bạn có thể xem lại Bài 6: Các loại Vòng lặp trong PHP (for, while, do while). Còn ở bài này mình vẫn sẽ giới thiệu về vòng lặp nhưng nội dung chỉ xoay quanh duy nhất một vòng lặp đó là foreach loop trong PHP.
Vòng lặp foreach trong PHP
Foreach loop là loại vòng lặp được dùng để duyệt các phần tử trong mảng, object. Đây là loại vòng lặp thường sẽ được sử dụng rất nhiều trong các dự án PHP sau này, đặc biệt là các bài toán cần liên kết đến cơ sở dữ liệu.
Cú pháp
<?php foreach ($variable as $key => $value) { // code... } ?>
hoặc
<?php foreach ($variable as $value) { // code... } ?>
Trong đó:
$variable
: Là biến mà các bạn muốn lặp (có thể là array, object).$key
: Là key của mảng hoặc properties của object.$value
: Là một biến tạm dùng để chứa giá trị được sao chép của từng phần tử của mảng, object.
Bài tập ví dụ
<?php //Khởi tạo mảng có key tự tăng. $array= [ 'A', 'B', 'C', 'D' ]; // Lặp cả key lẫn value của mảng foreach ($array as $key => $value) { echo "$key. Phần tử có key = $key và có giá trị= $value <br/>"; } ?>
Ở ví dụ trên thì $array là mảng ta truyền vào, $key và $value là 2 tham số mà ở mỗi vòng lặp nó tự động truyền giá trị. Kết quae xuất ra màn hình là:
0. Phần tử có key = 0 và giá trị= A 1. Phần tử có key = 1 và giá trị= B 2. Phần tử có key = 2 và giá trị= C 3. Phần tử có key = 3 và giá trị= D |
Cũng từ bài ví dụ trên ta có thể dùng theo cú pháp thứ 2 của vòng lặp foreach trong php như sau:
<?php //Khởi tạo mảng có key tự tăng. $array= [ 'A', 'B', 'C', 'D' ]; // Lặp lại value của mảng foreach ($array as $value) { echo "$value -"; } ?>
Ở mỗi vòng lặp foreach, PHP sẽ tạo ra các bản sao để chúng ta lấy dữ liệu của phần tử đang lặp đó, bản sao này sẽ được loại bỏ ngay lập tức sau khi kết thúc vòng lặp. Và ở mỗi vòng lặp sẽ kiểm tra còn phần tử liền kề hay không? Nếu còn thì vòng lặp được tiếp tục, ngược lại thì sẽ dừng.
Ở ví dụ trên, các bản sao của biến $array đã được tạo ra và mình đã không truyền biến $key vào trong vòng foreach nên mình chỉ có thể xuất được các giá trị $value ra màn hình mà thôi.
Kết quả xuất ra màn hình sẽ là: A -B -C -D –
Dùng tham chiếu để thay đổi phần tử hiện tại trong mảng foreach
Ví dụ
Hãy xem ví dụ bên dưới.
<?php $mang = array('one', 'two', 'three', 'four', 'five'); foreach ( $mang as $value ) { $value = strtoupper($value); // hàm strtoupper dùng để in hoa chuỗi ký tự } echo '<pre>'; print_r($mang); //xuất mảng ?>
Kết quả ra màn hình sẽ là:
Array ( [0] => one [1] => two [2] => three [3] => four [4] => five )
Ở ví dụ trên mình đã sử dụng hàm strtoupper nhằm mục đích in hoa hết các chuỗi ký tự là các giá trị của các phần tử có trong bảng array. Nhưng kết quả xuất ra màn hình vẫn là chứ thường.
Giải thích
Khi bắt đầu 1 loop foreach, PHP sẽ tạo ra 1 bản sao của mảng gốc để lặp, cho nên khi thay đổi các giá trị mảng gốc trong lúc đang chạy loop thì sẽ không có tác dụng. Vì vậy khi lặp chúng ta sẽ truyền tham chiếu truy xuất đến mảng gốc, có như vậy thì PHP sẽ không tạo 1 bản copy để dùng nữa mà nó sẽ được gọi thẳng đến và lặp trực tiếp trên mảng gốc. Khi này, chúng ta thay đổi giá trị các phần tử trong mảng gốc sẽ có tác dụng.
Cách gọi 1 tham chiếu cho biến: đặt thêm ký tự “&” trước biến đó.
Như vậy cũng từ ví dụ trên ta sẽ làm như sau:
<?php $mang = array('Xin', 'Chao', 'Moi', 'Nguoi', 'Den', 'Voi', 'Khoa', 'Hoc', 'PHP', 'Can', 'Ban'); foreach ( $mang as &$value ) { //mình đã thêm ký tự & trước biến $value để gọi 1 tham chiếu $value = strtoupper($value); // hàm strtoupper dùng để in hoa chuỗi ký tự } echo '<pre>'; print_r($mang); //xuất mảng ?>
Ở đây mình đã sử dụng tham chiếu &$value để truy xuất đến mảng gốc, khi này ta thay đổi giá trị của các phần tử trong mảng gốc sẽ có hiệu lực và ra kết quả như sau.
Array ( [0] => XIN [1] => CHAO [2] => MOI [3] => NGUOI [4] => DEN [5] => VOI [6] => KHOA [7] => HOC [8] => PHP [9] => CAN [10] => BAN )
Kết luận
- Foreach trong PHP sẽ tạo ra một bản sao của mảng để lặp.
- Khi foreach đang lặp theo bản sao của mảng gốc thì thay đổi giá trị phần tử trong mảng theo cách thông thường sẽ không có tác dụng
- Muốn thay đổi giá trị phần tử hiện tại trong khi lặp thì phải dùng tham chiếu.
Vòng lặp foreach lồng nhau (mảng 2 chiều)
Cũng như các vòng lặp đã được đề cập ở bài 6 thì đối với vòng lặp foreach trong bài này cũng có tính chất tương tự là có thể lồng nhau. Thường thì ta sẽ sử dụng vòng lặp foreach lồng nhau để duyệt phần tử của mảng 2 chiều.
Ví dụ: duyệt các phần tử của mảng 2 chiều bằng vòng lặp foreach:
<?php //Khởi tạo mảng 2 chiều $array = [ 0 => 1, 1 => [1 => 4, 2 => 6], 2 => [1 => "aa", 2 => "bb"], 3 => [1 => 10, 2 => "cc", 3 => 0] ]; foreach ($array as $value) { if (is_array($value)) { foreach ($value as $item) { echo $item . " - "; } } else echo $value . " - "; } ?>
Như vậy ta sẽ có kêt quả như sau: 1 – 4 – 6 – aa – bb – 10 – cc – 0 –
Kết thúc:
Vậy là qua bài 6 và bài 7 này mình đã giới thiệu cho các bạn về 4 loại vòng lặp khác nhau thường được dùng trong PHP. Nếu các bạn có thắc mắc nay cần tư vấn điều gì thì hãy để lại comment bên dưới bài viết này nhé!, Mình sẽ cố gắng hỗ trợ các bạn!
Hãy tiếp tục trong series học PHP căn bản ở các bài viết tiếp theo các bạn nhé!
Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!
Xem thêm:
- Bài 2: Cú pháp trong PHP, Khai báo hằng và biến trong PHP
- Bài 3: Những kiểu dữ liệu trong PHP
- Bài 4: Toán tử và biểu thức trong PHP
- Lộ trình học PHP cơ bản dành cho tất cả mọi người
- Bài 5: Biểu Thức Điều Kiện Trong PHP (Lệnh if, else, switch)
- Bài 6: Các loại Vòng lặp trong PHP (for, while, do while)
- Bài 14: Cookie là gì? Cookie trong PHP