Vòng lặp foreach trong PHP | Laptrinhcanban.com

Vòng lặp foreach trong PHP

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');

foreach ($gio_qua as $qua){
echo $qua."\n";
}

Lúc này, thứ tự thực hiện câu lệnh như sau:

  1. Khởi tạo biến $gio_qua chứa 3 giá trị gồm tao, cam , dau.

  2. Gán tao trong $gio_qua vào biến $qua.

  3. In ra màn hình giá trị của $qua (= táo), sau đó làm rỗng $qua.

  4. Gán cam trong $gio_qua vào biến $qua.

  5. In ra màn hình giá trị của $qua. (=cam), sau đó làm rỗng $qua.

  6. Gán dâu trong $gio_qua vào biến $qua.

  7. In ra màn hình giá trị của $qua. (=dâu), sau đó làm rỗng $qua.

  8. 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
cam
dau

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');

foreach ($gio_qua as $qua => $mau){
echo $qua.' => '.$mau."\n";
}

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
cam => vang
dau => do

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);


foreach ($pricelist as $value){
$value *= 1.05;
}

foreach ($pricelist as $value){
echo $value."\n";
}

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
100
120

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);


foreach ($pricelist as &$value){
$value *= 1.05;
}
unset($value);

foreach ($pricelist as $value){
echo $value."\n";
}

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
105
105

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.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.