Hướng dẫn php array memory size - kích thước bộ nhớ mảng php
Tôi vừa gặp phải vấn đề về kích thước bộ nhớ lớn của mảng PHP. Tôi đang cố gắng lưu trữ một lượng dữ liệu khá nhỏ trên mỗi đối tượng, trong một loạt các mảng nhỏ. Bộ lưu trữ trông như thế này. Show
Tôi cần 20 mảng giữa trở lên được hiển thị ở đây (ví dụ: 'Ứng dụng', 'Subapps', v.v.). Đó là một mảng mảng mảng, với các mảng cuối cùng luôn dài chính xác 6 giá trị. Vì chỉ có 18 giá trị, tôi cho rằng nó không phải là nhiều bộ nhớ, nhưng tôi đã phát hiện ra rằng PHP sử dụng khoảng 144 byte cho mỗi giá trị, do đó, nó trở nên rất lớn, đặc biệt là vì tôi có khoảng 3000 đối tượng như vậy. Nó sử dụng khoảng 30k mỗi đối tượng, chỉ trên 20 khối mảng này. Vì vậy, tôi đang tìm kiếm một giải pháp hiệu quả bộ nhớ. Vì mảng cuối cùng của tôi luôn là 6 giá trị, tôi nghĩ rằng có lẽ tôi có thể đóng gói/giải nén. Tôi cũng đã xem xét splfixedarray nhưng nó không phù hợp với nhu cầu của tôi theo một số cách và không tiết kiệm nhiều bộ nhớ. Tôi cũng muốn các giá trị hiển thị ở định dạng có thể đọc được trong cơ sở dữ liệu của mình trong trường hợp tôi cần chỉnh sửa chúng theo cách thủ công trong DB (một phương thức tôi đã thử lưu bộ nhớ nhưng các giá trị đã bị cắt xén trong DB). Cập nhật - Giải pháp. Tôi tìm thấy một giải pháp đơn giản cho điều này. Các mảng là json_encode'd để lưu vào cơ sở dữ liệu. Khi tôi tải chúng, chúng được giải mã. Ban đầu tôi đã giải mã toàn bộ lô cùng một lúc, do đó sử dụng bộ nhớ lớn, nhưng giải pháp đơn giản là giữ cho chúng được mã hóa cho đến khi cần thiết, sau đó giải mã - quá trình - mã hóa. Bằng cách này, chỉ có một được giải mã vào mảng và phần còn lại vẫn được mã hóa, dường như sử dụng một lượng bộ nhớ rất nhỏ. 9 năm trướcarray in PHP is actually an ordered map. A map is a type that associates values to keys. This type is optimized for several different uses; it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more. As array values can be other arrays, trees and multidimensional arrays are also possible. Một mảng trong PHP thực sự là một bản đồ được đặt hàng. Bản đồ là một loại liên kết các giá trị với các khóa. Loại này được tối ưu hóa cho một số cách sử dụng khác nhau; Nó có thể được coi là một mảng, danh sách (vector), bảng băm (một triển khai bản đồ), từ điển, thu thập, ngăn xếp, hàng đợi, và có thể nhiều hơn nữa. Vì các giá trị mảng có thể là các mảng khác, cây và mảng đa chiều cũng có thể. Giải thích về các cấu trúc dữ liệu đó nằm ngoài phạm vi của hướng dẫn này, nhưng ít nhất một ví dụ được cung cấp cho mỗi chúng. Để biết thêm thông tin, hãy hướng tới các tài liệu đáng kể tồn tại về chủ đề rộng lớn này.Cú pháparray()Chỉ định với Array ()array can be created using the array() language construct. It takes any number of comma-separated array( key => value, key2 => value2, key3 => value3, ... )6 pairs as arguments. array( key => value, key2 => value2, key3 => value3, ... ) Một mảng có thể được tạo bằng cách sử dụng cấu trúc ngôn ngữ mảng (). Nó lấy bất kỳ số lượng các cặp array( key => value, key2 => value2, key3 => value3, ... )6 được phân tách bằng dấu phẩy làm đối số.
Một cú pháp mảng ngắn tồn tại thay thế array(1) { [1]=> string(1) "d" }1 Ví dụ #1 một mảng đơn giảnkey can either be an int or a string. The value can be of any type. Khóa có thể là một int hoặc một chuỗi. Giá trị có thể là bất kỳ loại.key casts will occur:
Mảng và đối tượng không thể được sử dụng làm khóa. Làm như vậy sẽ dẫn đến một cảnh báo: array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }4. Nếu nhiều phần tử trong khai báo mảng sử dụng cùng một khóa, chỉ có phần cuối cùng sẽ được sử dụng vì tất cả các phần tử khác đều bị ghi đè. array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }5 Ví dụ Ví dụ #2 mẫu đúc và ghi đè array(1) { [1]=> string(1) "d" } Ví dụ trên sẽ xuất ra: Vì tất cả các khóa trong ví dụ trên được chuyển đến array(1) { [1]=> string(1) "d" }9, giá trị sẽ được ghi đè lên mọi yếu tố mới và giá trị được gán cuối cùng array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }7 là giá trị duy nhất còn lại.int and string keys at the same time as PHP does not distinguish between indexed and associative arrays. Các mảng PHP có thể chứa các khóa Int và chuỗi cùng lúc với PHP không phân biệt giữa các mảng được lập chỉ mục và kết hợp.int and string keys array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }8 Ví dụ Ví dụ #2 mẫu đúc và ghi đè array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) } Ví dụ trên sẽ xuất ra:key is optional. If it is not specified, PHP will use the increment of the largest previously used int key. Vì tất cả các khóa trong ví dụ trên được chuyển đến array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }9 Ví dụ Ví dụ #2 mẫu đúc và ghi đè array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" } Ví dụ trên sẽ xuất ra: Vì tất cả các khóa trong ví dụ trên được chuyển đến array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }0 Ví dụ Ví dụ #2 mẫu đúc và ghi đè array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" } Ví dụ trên sẽ xuất ra: Vì tất cả các khóa trong ví dụ trên được chuyển đến Các mảng PHP có thể chứa các khóa Int và chuỗi cùng lúc với PHP không phân biệt giữa các mảng được lập chỉ mục và kết hợp. array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }4 Ví dụ Ví dụ #2 mẫu đúc và ghi đè array(7) { [1]=> string(1) "g" [-1]=> string(1) "d" ["01"]=> string(1) "e" ["1.5"]=> string(1) "f" [0]=> string(1) "h" [""]=> string(1) "j" [2]=> string(1) "l" } Ví dụ trên sẽ xuất ra:Vì tất cả các khóa trong ví dụ trên được chuyển đến array(1) { [1]=> string(1) "d" }9, giá trị sẽ được ghi đè lên mọi yếu tố mới và giá trị được gán cuối cùng array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }7 là giá trị duy nhất còn lại. Các mảng PHP có thể chứa các khóa Int và chuỗi cùng lúc với PHP không phân biệt giữa các mảng được lập chỉ mục và kết hợp. array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }6 Ví dụ Ví dụ #2 mẫu đúc và ghi đè string(3) "bar" int(24) string(3) "foo"
Ví dụ #8 mảng dereferencing array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }9
Mảng dereference một giá trị vô hướng không phải là một chuỗi mang lại |