CẤU TRÚC FOREACH TRONG PHP

Hầu như mọi ngữ điệu lập trình đều cung ứng các vòng lặp foreach với PHP cũng ko ngoại lệ. Bản thân cá là bạn đã và đang sử dụng nó rất nhiều lần.Về cơ bản, không có gì đặc trưng về vòng lặp foreach vào PHP, mà lại mình nghĩ có một vài sự thật mà bạn nên biết.Bởi vì các cấu tạo điều khiển vòng lặp Foreach được sử dụng mọi lúc, do đó cần kiêng mắc lỗi khi thực hiện chúng.

Bạn đang xem: Cấu trúc foreach trong php

Bạn đã xem: cấu tạo foreach vào php

Bạn đang xem: biện pháp dùng hàm foreach vào php


*

6 sự thật về vòng lặp Foreach vào PHPTrong bài viết hôm nay, mình đang chỉ cho chính mình 6 thực sự mà các Lập trình viên PHP cần hiểu rõ về các vòng lặp foreach.

Xem thêm: Miễn Phí Tải Về Virtual Dyno Cho Windows 7 ::: Phần Mềm Dyno

1. Auto ép phong cách int của key

PHP có một vài tính năng thân mật và gần gũi với tín đồ dùng để giúp đỡ người mới ban đầu học lập trình cùng cả thiết kế viên ít kinh nghiệp viết mã dễ dãi hơn.Một trong những đó là đẳng cấp "Tung hứng":Trình phiên dịch PHP tự động hóa thiết lập những kiểu biến đổi tùy ở trong vào ngữ cảnh và dựa vào toán tử nào được sử dụng kèm theo.Điều này không tức là PHP không có các giao diện dữ liệu. Bên trên thực tế, từng biến tất cả kiểu dữ liệu riêng, tuy thế nó tất cả thể biến đổi theo thời gian.$a = 1 khiến cho kiểu của $a là số nguyên, cùng $a = "1" tạo cho kiểu của $a là chuỗi.Trong cả nhì trường hợp, trong cả khi kiểu dữ liệu khác nhau, một câu lệnh như:$a = $a + 1... Lại khiến cho $a trở thành một số trong những nguyên.Mặc dù việc tung hứng hình trạng dữ liệu rất có thể thuận tiện trong vô số trường hợp, mà lại điều đặc biệt quan trọng là luôn luôn luôn đề xuất xem xét một số loại biến họ đang xử lý, nhất là khi sử dụng những toán tử so sánh nghiêm ngặt (như "===").Các toán tử so sánh nghiêm ngặt rất hữu ích vì chúng có thể phân biệt giữa những giá trị như 0, FALSE hoặc NULL, trong khi các toán tử so sánh lỏng lẻo (như là "==") coi quý hiếm của chúng tương đương nhau.Hãy chú ý một điểm.Bên trong số vòng lặp foreach chúng ta cũng có thể truy cập gần như cặp key / value của mảng bạn đang lặp và đôi khi chúng ta có thể cần đối chiếu key với một số giá trị khác.Ở đây, điều này còn có nghĩa là: Khi còn chỉ khi, key là 1 trong chữ số, thì nó sẽ tự động được thay đổi thành một vài nguyên ở đầu vòng lặp.Do đó, bài toán so sánh chặt chẽ nó với một chuỗi sẽ luôn luôn trả về FALSE.Ví dụ sau đây cho mình thấy rõ vấn đề:

2. Sửa thay đổi một Mảng từ bên trong Vòng lặp

Nếu bạn đang sử dụng foreach để lặp đi lặp lại một mảng và bạn có nhu cầu sửa đổi chủ yếu mảng đó, thì bao gồm hai phương pháp để làm điều đó.Đầu tiên là trỏ đến thành phần mảng mà bạn có nhu cầu chỉnh sửa bởi cú pháp $Array (vì vậy chúng ta phải sử dụng cú pháp foreach $key => $ value vào phần đầu foreach).Một cách khác là có mang $value làm cho tham chiếu và chỉnh sửa trực tiếp.Hai lấy ví dụ sau đây cho thấy thêm cách thực hiện:Ví dụ 1:$array = array(1, 2);foreach ($array as $key => $value) $array += 1;print_r($array);Ví dụ 2: &$value) $value += 1;print_r($array);Trong cả nhì trường hợp, đầu ra output sẽ là:Array( => 2 => 3)

3. Ghi đè đổi mới trong Foreach

Bạn yêu cầu nhận thức được rằng những vòng lặp foreach không tồn tại phạm vi riêng (scope).Điều này tức là các biến được khai báo bên phía ngoài vòng lặp cũng có thể có sẵn bên phía trong vòng lặp và bất kỳ biến làm sao được khai báo phía bên trong vòng lặp vẫn tiếp tục có thể truy cập được ngay cả sau khoản thời gian vòng lặp kết thúc.Điều này cũng áp dụng cho các biến $key => $value được sử dụng trong phần đầu foreach.Ví dụ này cho mình thấy đông đảo gì hoàn toàn có thể xảy ra:

$array = array(1, 2);$value = 'my value';foreach ($array as $key => $value) // bởi vì somethingecho $value; /* output đầu ra is "2" */Sau vòng lặp, $value không thể chứa "my value" nữa nhưng ráng vào sẽ là giá trị 2, vì nó đã trở nên ghi đè bởi vì phép gán foreach.Trong lúc mình đã tìm tìm thêm thông tin chi tiết về vấn đề này, tôi đã tìm thấy bài đăng độc đáo này nêu bật một mối nguy khốn tiềm tàng khác.Hãy giúp xem một lấy một ví dụ này trước:$array = array(1, 2, 3);foreach ($array as $key => &$value) // vày something/* Everything ok here */print_r($array);foreach ($array as $key => $value) // vì something/* Something wrong! */print_r($array);Kết quả:Array( => 1 => 2 => 3)Array( => 1 => 2 => 2)Sau vòng lặp foreach trang bị hai, phần tử cuối cùng bên trong mảng đã chũm đổi. Chuyện gì đã xảy ra ở đây?Trong phần ra mắt đầu tiên, chúng ta sử dụng cú pháp &$value, bởi vì vậy $value được đặt làm cho tham chiếu mang lại từng phần tử mảng. Trong vòng lặp cuối cùng, $value vì vậy tương đương cùng với $array.Sau lúc foreach kết thúc, $value tiếp tục có thể truy cập được (vì foreach không tồn tại phạm vi riêng).Khi foreach đồ vật hai bắt đầu, $value vẫn bị ràng buộc với bộ phận cuối cùng của mảng, vị đó, trong những vòng lặp, cả $value$Array phần lớn bị ghi đè.Đây là cụ thể những gì xảy ra:Foreach đầu tiên, $value trỏ mang đến $array.Foreach sản phẩm hai, lần lặp đầu tiên: $array được đặt với bộ phận mảng thứ nhất (vì vậy, $array = 1).Foreach sản phẩm hai, lần lặp thứ hai: $array được đặt với bộ phận mảng đồ vật hai (vì vậy, $arary = 2).Foreach trang bị hai, lần lặp sản phẩm ba: $array được đặt với phần tử mảng thứ cha (tức là bao gồm nó, do vậy $array = 2).Điều đó lý giải kết quả bọn họ nhận được như trên.Để tránh vụ việc này, luôn luôn là một ý tưởng tốt để unset bất kỳ biến làm sao được sử dụng trong các vòng lặp foreach, đặc biệt là khi sử dụng tham chiếu.

4. Bao gồm cần sử dụng RESET()?

Trước PHP 7, nên thực hiện reset() (trước PHP 5, áp dụng trước khi ban đầu vòng lặp).Đối với PHP 7 thì sự việc này không thể nữa, vày foreach hiện áp dụng con trỏ nội bộ. Điều này tiết kiệm chi phí cho bọn họ một vài dòng mã.Ví dụ sau đây cho biết thêm rằng sau vòng lặp foreach, con trỏ bên phía trong mảng bé trỏ vẫn trỏ đến phần tử đầu tiên.

$array = array(1, 2, 3);foreach ($array as $item) echo 'Item: ' . $item . '';/* Current công trình is still 1 */echo 'Current item: ' . Current($array); /* Outputs 1 */