Ở 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 sẽ vẫn 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à vòng lặp foreach trong PHP.
Vòng lặp foreach trong PHP
Vòng lặp foreach là loại loop đượ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 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à các 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ụ 1
<?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 "Đây là 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à:
Phần tử có key = 0 và giá trị= A Phần tử có key = 1 và giá trị= B Phần tử có key = 2 và giá trị= C 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 forech 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
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ắng đầ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ị trong mảng gốc 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 mảng để dùng nữa mà nó sẽ được gọi đế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ạn 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é!
Xem thêm:
- Lộ trình học PHP Căn Bản
- Bài 6: Các loại Vòng lặp trong PHP (for, while, do while)
- Bài 5: Biểu Thức Điều Kiện Trong PHP (Lệnh if, else, switch)
- Cách sửa lỗi error establishing a database connection cho website
- Mở Đọc File Excel Trong C# Với Microsoft Office Interop Excel dll
Leave a Reply