Bài viết đăng tại: https://laptrinhcanban.com
Cùng tìm hiểu về vòng lặp foreach trong PHP. Bạn sẽ biết vòng lặp foreach trong PHP là gì cũng như cách sử dụng vòng lặp foreach để lấy và thay đổi giá trị của các phần tử có trong một mảng PHP sau bài học này.
Vòng lặp foreach trong PHP
foreach trong PHP là vòng lặp tiện lợi giúp chúng ta truy cập lần lượt đến các phần tử có trong một mảng. Bằng cách kết hợp các xử lý khác trong khối lệnh của foreach, sau khi truy cập một phần tử trong mảng, chúng ta có thể thực hiện các thao tác như lấy hoặc thay đổi giá trị của phần tử đó.
Cú pháp vòng lặp foreach trong PHP như sau:
foreach ($array as $value){
Câu lệnh 1 trong khối foreach ;
Câu lệnh 2 trong khối foreach ;
…
}
Trong đó $array
là mảng đang xét, và $value
là một biến được sử dụng luân phiên để gán giá trị của các phần tử được lấy ra lần lượt trong mảng đó.
Trong trường hợp mảng đang xét chứa các phần tử được tạo bởi các cặp key-value, chúng ta có thể sử dụng tới cú pháp vòng lặp foreach dưới đây để có thể truy cập và lấy cả các giá trị $key và $value của các phần tử trong mảng này.
foreach ($array as $key =>
$value){
Câu lệnh 1 trong khối foreach ;
Câu lệnh 2 trong khối foreach ;
…
}
Trong đó biến $key
được thêm vào nhằm sử dụng luân phiên để gán key của các phần tử được lấy ra lần lượt trong mảng ban đầu.
Ngoài ra, còn một cú pháp thứ 3 của vòng lặp foreach, được sử dụng để thay đổi giá trị của các phần tử có trong một mảng. Cú pháp này sẽ được trình bày ở phần dưới cùng của bài viết.
Vòng lặp foreach
sẽ lặp số lần bằng đúng với số lượng phần tử có trong mảng. Trong mỗi vòng lặp của foreach, chương trình sẽ lấy một phần tử trong $array ra, gán giá trị của phần tử đó vào biến $value
và thực hiện các câu lệnh mô tả trong khối foreach để xử lý phần tử được lấy.
Sau mỗi vòng lặp, giá trị của biến $value
được làm rỗng để lưu trữ giá trị của phần tử trong vòng lặp tiếp theo.
Sử dụng vòng lặp foreach để lấy giá trị của phần tử trong mảng
Chúng ta hãy cùng xem ví dụ sử dụng vòng lặp foreach trong PHP dưới đây:
Giả sử chúng ta có một mảng $gio_qua chứa 3 loại quả là táo, cam ,dâu. Chúng ta sẽ dùng chương trình dưới đây để lấy từng loại quả ra mảng này như sau:
$gio_qua = array('tao', 'cam', 'dau'); |
Lúc này, thứ tự thực hiện câu lệnh như sau:
Khởi tạo biến $gio_qua chứa 3 giá trị gồm
tao, cam , dau
.Gán
tao
trong $gio_qua vào biến $qua.In ra màn hình giá trị của $qua (= táo), sau đó làm rỗng $qua.
Gán
cam
trong $gio_qua vào biến $qua.In ra màn hình giá trị của $qua. (=cam), sau đó làm rỗng $qua.
Gán
dâu
trong $gio_qua vào biến $qua.In ra màn hình giá trị của $qua. (=dâu), sau đó làm rỗng $qua.
Do đã lần lượt gán hết 3 quả trong $gio_qua, nên kết thúc lệnh
foreach
.
Như đã thấy ở ví dụ trên, do trong $gio_qua chỉ có 3 phần tử, nên lệnh foreach
cũng sẽ chỉ lặp lại bằng đúng 3 lần mà thôi.
Và kết quả, giá trị của các phần tử trong mảng này được in ra màn hình như sau:
tao |
Sử dụng vòng lặp foreach để lấy key và value của phần tử trong mảng
Đối với các mảng chứa phần tử được tạo bởi các cặp key-value, chúng ta sẽ dùng tới cú pháp thứ 2 của vòng lặp foreach để xử lý.
Hãy cùng xem ví dụ dưới đây để hiểu rõ hơn.
Giả sử chúng ta có mảng $gio_qua với mỗi phần tử của nó được tạo bởi một cặp key-value chứa thông tin về tên quả - màu sắc. Chúng ta sẽ dùng vòng lặp foreach để truy cập tới từng phần tử và xử lý giá trị của key và value của chúng như sau:
$gio_qua = array('tao' => 'xanh', 'cam' =>'vang', 'dau' => 'do'); |
Kết quả, với mỗi lần thực hiện lặp, tên quả và màu sắc của quả sẽ được lấy ra từ mảng và in ra màn hình:
tao => xanh |
Sử dụng vòng lặp foreach để thay đổi giá trị của phần tử trong mảng
Chúng ta có thể sử dụng vòng lặp foreach để truy cập và lấy giá trị của các phần tử có trong một mảng.
Tuy nhiên cần lưu ý là không phải chúng ta lấy phần tử ra khỏi mảng, mà chỉ sao chép giá trị của phần tử đó và gán vào biến để xử lý mà thôi, do đó mảng và những phần tử trong mảng đó vốn không hề thay đổi.
Thật vậy. Hãy cùng xem ví dụ sau:
$pricelist = array(80, 100, 120); |
Chúng ta đã thử thay đổi giá trị của các phần tử chứa trong biến $value, tuy nhiên kết quả thì mảng vẫn không thay đổi.
80 |
Do vậy, trong trường hợp muốn thay đổi trực tiếp giá trị các phần tử của mảng bằng vòng lặp foreach, thay vì cú pháp thông thường thì chúng ta cần sử dụng tới cú pháp foreach đặc biệt sau đây:
foreach ($array as &$value){
Câu lệnh 1 trong khối foreach ;
Câu lệnh 2 trong khối foreach ;
…
}
Điểm khác biệt ở đây chính là, thay vì sử dụng tên biến $value
thì chúng ta đã thêm vào dấu &
trước tên biến, nhằm xác lập mối quan hệ tham chiếu của biến này tới phần tử được xét. Qua đó khi giá trị của biến thay đổi thì giá trị của phần tử cũng sẽ được đổi theo.
Ví dụ cụ thể, cũng với mảng trên:
$pricelist = array(80, 100, 120); |
Lần này, do đã sử dụng thêm dấu &
trước tên biến $value nên mảng đã được thay đổi như sau:
84 |
Lưu ý trong ví dụ này, sau khi kết thúc vòng lặp foreach
, chúng ta thêm lệnh unset($value);
để reset lại biến $value
nhằm kết thúc việc tham chiếu trực tiếp giá trị của phần tử của biến này.
Lý do là bởi dù vòng lặp foreach
đã kết thúc, nhưng biến $value
vẫn tiếp tục tham chiếu giá trị của phần tử trong mảng $gia_tien, nên trong các câu lệnh tiếp theo của chương trình php, có khả năng giá trị của phần tử trong $gia_tien sẽ bị thay đổi mỗi khi biến $value
được sử dụng trong các câu lệnh khác.
Bằng việc sử dụng unset
, chúng ta đã reset lại biến giá trị và kết thúc phiên tham chiếu ở trên.
So sánh vòng lặp foreach và while trong php
Khác với vòng lặp while
, vòng lặp foreach
trong php không có biểu thức điều kiện. Vòng lặp foreach
không dựa vào biểu thức điều kiện để quyết định số lần lặp, mà sẽ lặp số lần bằng đúng với số lượng phần tử có trong mảng đó.
Ngoài ra, chúng ta có thể sử dụng kết hợp lệnh break
hay continue
trong lệnh foreach
tương tự như với lệnh while
.
Cũng cần chú ý là với cú pháp foreach thông thường, không phải chúng ta lấy phần tử ra khỏi mảng, mà chỉ sao chép giá trị của phần tử đó và gán vào biến mà thôi, do đó mảng và những phần tử trong mảng vốn không hề thay đổi. Do vậy chúng ta phải sử dụng cú pháp foreach đặc biệt nếu muốn thực hiện điều này.
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về vòng lặp foreach trong PHP rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về PHP trong các bài học tiếp theo.
URL Link
https://laptrinhcanban.com/php/nhap-mon-lap-trinh-php/vong-lap-trong-php/vong-lap-foreach-trong-php/
HOME › hướng dẫn học lập trình php cho người mới bắt đầu>>05. vòng lặp trong php