PHP: foreach – cho trong mảng php

Bạn đang xem : cho trong mảng php

CẢNH BÁO: Vòng lặp qua "giá trị theo tham chiếu" để có "hiệu suất cao hơn" là một lầm tưởng cũ. Nó thực sự là WORSE!

& lt;? Php

chức năng

< p class = "default"> một

(

$ arr

) {< br /> foreach (

$ arr

as

$ val

) {

echo

$ val

; Hàm
}
}

hai

(

< p class = "default"> $ arr

) {
foreach (

$ arr

as & amp;

$ val

) {

echo < / p>

$ val

;
}
}

$ a

= array (

'a'

,

'b'

,

'c'

);

một

(

$ a

);

hai

(

$ a

);

? & gt;

Bạn nghĩ cái nào nhanh hơn?

Rất nhiều người nghĩ rằng câu trả lời là hai () vì nó sử dụng "tham chiếu đến giá trị, mà nó không phải sao chép từng giá trị khi nó lặp lại".

Chà, đó là hoàn toàn sai!

Đây là những gì thực sự xảy ra:

* one ():

- Hàm này nhận một mảng làm đối số ($ arr).
- Bản thân đối số của hàm mảng không được truyền bằng tham chiếu, vì vậy, hàm biết rằng nó không được phép sửa đổi bản gốc.
- Sau đó, vòng lặp foreach sẽ xảy ra. Bản thân mảng không được chuyển qua tham chiếu đến hàm, vì vậy PHP biết rằng nó không được phép sửa đổi mảng bên ngoài, do đó, nó tạo một bản sao của trạng thái bù lặp bên trong của mảng (đó chỉ là một số đơn giản cho biết mục bạn hiện đang ở trong những thứ như foreach ()), hầu như không tốn hiệu suất hoặc bộ nhớ vì nó chỉ là một số nhỏ.
- Tiếp theo, nó sử dụng phần bù lặp đã sao chép đó để lặp qua tất cả các cặp khóa / giá trị của mảng (tức là khóa thứ 0, khóa thứ nhất, khóa thứ 2, v.v.). Và giá trị tại phần bù hiện tại (PHP "zval") được gán cho một biến có tên là $ val.
- $ val có tạo ra một BẢN SAO của giá trị không? Đó là những gì NHIỀU người nghĩ. Nhưng câu trả lời là KHÔNG. KHÔNG. Nó sử dụng lại giá trị hiện có trong bộ nhớ. Với chi phí hiệu suất bằng không. Nó được gọi là "copy-on-write" và có nghĩa là PHP không tạo bất kỳ bản sao nào trừ khi bạn cố gắng SỬA ĐỔI giá trị.
- Nếu bạn cố sửa đổi $ val, SAU ĐÓ nó sẽ cấp phát một zval MỚI trong bộ nhớ và thay vào đó hãy lưu trữ $ val ở đó (nhưng nó vẫn sẽ không sửa đổi mảng ban đầu, vì vậy bạn có thể yên tâm).

Được rồi, vậy phiên bản thứ hai đang làm gì? Yêu thích "lặp lại các giá trị bằng tham chiếu"?

* two ():

- Hàm này nhận một mảng làm đối số ($ arr).
- Mảng Bản thân đối số hàm không được truyền bằng tham chiếu, vì vậy hàm biết rằng nó không được phép sửa đổi bản gốc.
- Sau đó, vòng lặp foreach sẽ xảy ra. Bản thân mảng không được chuyển qua tham chiếu đến hàm, vì vậy PHP biết rằng nó không được phép sửa đổi mảng bên ngoài.
- Nhưng nó cũng thấy rằng bạn muốn xem xét tất cả các GIÁ TRỊ bằng tham chiếu (& amp; $ val), vì vậy PHP nói "Ồ, điều này thật nguy hiểm. Nếu chúng tôi chỉ cung cấp cho họ tham chiếu đến các giá trị của mảng ban đầu và họ chỉ định một số giá trị mới cho tham chiếu của họ, họ sẽ phá hủy mảng ban đầu mà họ không được phép touch! ".
- Vì vậy, PHP tạo BẢN SAO ĐẦY ĐỦ của toàn bộ mảng và TẤT CẢ CÁC GIÁ TRỊ trước khi nó bắt đầu lặp lại. CÓ!

Do đó: DỪNG sử dụng phương pháp lặp lại "& amp; $ val" cũ, thần thoại! Nó gần như luôn luôn BAD! Với hiệu suất kém hơn và rủi ro về lỗi và lỗi như được trình bày trong sách hướng dẫn.

Bạn luôn có thể viết thủ công các nhiệm vụ mảng một cách rõ ràng mà không cần tham chiếu, như thế này:

& lt;? php

$ a

= array (

1

,

2

,

3

);
foreach (

$ a

as

$ key

= & gt;

$ val

) {

$ a

[

$ key < / p>

] =

$ val

*

10

;
}

? & gt;

Bài học chính là: ĐỪNG lặp lại một cách mù quáng qua các giá trị bằng cách tham chiếu! Nói với PHP rằng bạn muốn tham chiếu trực tiếp sẽ buộc PHP cần sao chép mảng TOÀN BỘ để bảo vệ các giá trị ban đầu của nó! Vì vậy, thay vào đó, chỉ cần lặp lại bình thường và tin tưởng thực tế là PHP * * thực sự đủ thông minh để không bao giờ sao chép các giá trị mảng ban đầu của bạn! PHP sử dụng "copy-on-write", có nghĩa là cố gắng gán một thứ gì đó mới cho $ val là điều DUY NHẤT gây ra sao chép và chỉ của phần tử DUY NHẤT đó! :-) Nhưng dù sao thì bạn cũng không bao giờ làm điều đó, khi lặp lại mà không có tham chiếu. Nếu bạn muốn sửa đổi điều gì đó, bạn sử dụng "$ a [$ key] = 123;" phương pháp cập nhật giá trị.

Hãy tận hưởng và chúc may mắn với mã của bạn! :-)


Xem thêm những thông tin liên quan đến chủ đề cho trong mảng php

Tự học PHP -7. Tìm hiểu về mảng trong PHP

  • Tác giả: cafedev
  • Ngày đăng: 2020-08-22
  • Đánh giá: 4 ⭐ ( 5645 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chúng ta sẽ Tìm hiểu về mảng – Array trong PHP, cách khai báo, sử dụng nó như thế nào…

    Trang chủ: https://cafedev.vn/
    Hãy cùng like, share video, đăng ký theo dõi kênh để ủng hộ cafedev làm nhiều video ý và hay hơn nhé.
    Chân thành cảm ơn ace. Chào thân ái vài quyết thắng!

    cafedevn cafedev

    Cafedev.vn – Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: cafedevn@gmail.com
    Fanpage: https://www.facebook.com/cafedevn
    Group: https://www.facebook.com/groups/cafedev.vn/
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    Pinterest: https://www.pinterest.com/cafedevvn/
    YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/

Mảng và các hàm xử lý mảng trong PHP

  • Tác giả: viblo.asia
  • Đánh giá: 3 ⭐ ( 4956 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1. Định nghĩa Một mảng là một cấu trúc dữ liệu mà lưu giữ một hoặc nhiều kiểu giá trị giống nhau trong một giá trị đơn. Nói đơn giản thì mảng như các dòng xe ô tô, từng dòng xe mang từng giá trị riêng…

Mảng trong PHP

  • Tác giả: www.vietjack.com
  • Đánh giá: 5 ⭐ ( 9354 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Làm việc Với Mảng trong PHP Đúng cách

  • Tác giả: code.tutsplus.com
  • Đánh giá: 4 ⭐ ( 5899 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong hướng dẫn này, tôi sẽ liệt kê một danh sách các hàm phổ biến về mảng trong PHP với các ví dụ về cách sử dụng và cách làm tốt nhất. Mỗi nhà phát triển PHP phải biết sử dụng chúng như thế nào…

Mảng Trong PHP

  • Tác giả: techacademy.edu.vn
  • Đánh giá: 3 ⭐ ( 6413 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mảng là một cấu trúc dữ liệu lưu trữ một hoặc nhiều loại giá trị tương tự trong một giá trị duy nhất. Ví dụ: nếu bạn muốn lưu trữ 100 số thì thay vì xác định 100 biến dễ dàng để xác định một mảng có độ dài 100. Tìm hiểu về Mảng (Array) […]

Xử lý dữ liệu kiểu mảng (array) trong PHP

  • Tác giả: tuhocict.com
  • Đánh giá: 3 ⭐ ( 8978 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài học sẽ trình bày một số thao tác xử lý dữ liệu cơ bản trên mảng trong PHP, bao gồm thêm/bớt phần tử, duyệt danh sách phần tử của mảng với lệnh foreach.

Các hàm xử lý mảng trong php

  • Tác giả: freetuts.net
  • Đánh giá: 5 ⭐ ( 4587 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tổng hợp các hàm xử lý mạng trong php, giới thiệu các hàm hay sử dụng trong việc xử lý mảng trong lập trình web php

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Hàm file_put_contents() trong PHP - tập tin php đưa nội dung