cái nào nên được sử dụng để thao tác dữ liệu, mảng hoặc đối tượng mảng? Giống như tìm kiếm, sắp xếp và các thao tác mảng khác.Mảng và mảng PHPObject
Trả lời
Loại cơ bản là array
. Đây là bản đồ các khóa và giá trị có thể được ghi vào, đọc từ và truy cập trong một vòng lặp.
ArrayObject
là lớp mà bạn có thể mở rộng để tạo các đối tượng hoạt động như thể chúng là mảng. Nó thực hiện các phương thức như count
và sort
cho phép bạn xử lý một đối tượng như bạn sẽ xử lý một mảng. Đó là một phần của SPL (Thư viện PHP chuẩn).
Thông thường bạn sẽ sử dụng array
. Bạn sẽ biết khi nào bạn cần ArrayObject
.
Hầu hết thời gian một mảng là tất cả những gì cần thiết. ArrayObject là hữu ích nhất khi mở rộng cho chức năng trong sử dụng cụ thể.
bạn sử dụng array
cho đơn giản (và tiêu chuẩn) mảng
ArrayObject
là một lớp học, có thể được sử dụng để tăng cường Lớp học của riêng bạn để được sử dụng như mảng (nói một số Bộ sưu tập Lớp của bạn)
arrayObject chủ yếu là hữu ích khi serialization là cần thiết.
Ngoài ra, bạn có thể tạo lớp bộ sưu tập của riêng mình bằng cách mở rộng arrayObject. Sau đó, bạn có thể tuần tự hóa đối tượng lớp của mình để truyền dữ liệu.
đối với mảng hoạt động đơn giản và thông thường có thể dễ dàng hơn mảng arrayObject.
Đối tượng mảng có thể được mở rộng và chức năng được ghi đè. Ví dụ, append của bạn() chức năng có thể định dạng một số với hai chữ số thập phân trước khi gọi cha mẹ :: append()
Về mặt hiệu suất, bạn sẽ không nhận thấy một sự khác biệt thực sự giữa một array
và ArayObject
. Tôi chạy một thử nghiệm đơn giản. Ý tưởng là tạo mảng bằng cách sử dụng mảng() và ArrayObject mới và điền chúng với số lượng giá trị ngày càng tăng.
<?php
for($i = 0; $i < 2; $i++){
$method = $i == 0 ? 'array' : 'ArrayObject';
for($j = 0; $j < 7 ; $j++){
for($k = 0; $k < 100; $k++){
$max = pow(10,$j);
$array = $method == 'array' ? array() : new ArrayObject;
$time = explode(' ',microtime());
$sTime = $time[0] + $time[1];
for($l = 0; $l < $max; $l++){
$array[] = 'foo ' . $i . ':' . $j . ':' . $k . ':' . $l;
}
$time = explode(' ',microtime());
$eTime = $time[0] + $time[1];
$results[$method][$max][] = $eTime - $sTime;
}
}
}
?>
Kết quả
method lines average (µs) difference between methods (µs)
array 1 2.470 -1.044
array 10 8.452 +0.315
array 100 71.862 +10.719
array 1,000 773.826 +141.962
array 10,000 7,868.731 -675.359
array 100,000 76,954.625 -17,665.510
array 1,000,000 801,509.550 -84,356.148
ArrayObject 1 3.514 +1.044
ArrayObject 10 8.137 -0.315
ArrayObject 100 61.142 -10.719
ArrayObject 1,000 631.864 -141.962
ArrayObject 10,000 8,544.090 +675.359
ArrayObject 100,000 94,620.135 +17,665.510
ArrayObject 1,000,000 885,865.698 +84,356.148
trung bình là thời gian trung bình của 100 bài kiểm tra cho từng phương pháp và mỗi số dòng. Sự khác biệt giữa các phương pháp là không đáng kể (84 micro giây khi bạn xử lý một triệu hàng ...)
Tôi đã chạy thử nghiệm này nhiều lần và vì sự khác biệt luôn là một câu hỏi về micro giây, đôi khi một phương pháp hiệu quả hơn trong một bài kiểm tra, sau đó kém hiệu quả trong thời gian thử nghiệm tiếp theo ...
sự lựa chọn sẽ phụ thuộc nhu cầu của bạn:
- nếu bạn đối phó với mảng đơn giản, và làm một vòng lặp như
foreach()
hoặc tính toán một trung bình, mộtarray
là đủ, - nếu bạn cần lặp lại phức tạp hơn, sắp xếp, lọc, ... dễ dàng hơn để mở rộng
ArrayObject class
bằng trình lặp, phương thức của riêng bạn ...
- 1. Chức năng giảm mảng và mảng
- 2. Mảng Java và PostgreSQL
- 3. json và mảng trống
- 4. C++ Mảng và make_unique
- 5. Xóa mục khỏi mảng và thu hẹp mảng
- 6. Tạo chuỗi và mảng mảng Phân bổ bộ nhớ
- 7. Số phần tử trong mảng tĩnh và mảng động
- 8. cách tạo mảng và giá trị mảng trong xcode?
- 9. Lệnh Mảng và Tách để tạo mảng 2 chiều
- 10. Chuyển mảng char thành mảng byte và ngược lại
- 11. Chuyển đổi mảng và các đối tượng trong mảng vào mảng tinh khiết
- 12. Sự khác biệt giữa mảng mảng và mảng đa chiều là gì?
- 13. 'Mảng mảng' trong MATLAB?
- 14. Xóa toán tử và mảng?
- 15. array_filter và mảng đa chiều
- 16. Các mảng Doctrine và Postgres
- 17. con trỏ c và mảng
- 18. mảng Chia thành hai mảng
- 19. looping thông qua mảng mảng
- 20. Mảng push với mảng sư
- 21. Mảng ALLOCATABLE hoặc mảng POINTER?
- 22. Chuyển đổi mảng mảng thành một mảng của chuỗi
- 23. Chuyển đổi mảng php mảng vào mảng đơn
- 24. convert json mảng javascript mảng
- 25. Moustache (icanhaz) mảng iterating mảng
- 26. lọc mảng trống từ mảng của mảng trong Scala
- 27. Mảng đối tượng nhiều mảng của mảng số
- 28. ruby mảng kiểm tra các mảng nil
- 29. Hiệu quả: mảng char vs int mảng
- 30. mảng của con trỏ đến char mảng
Bạn có ví dụ về những gì bạn muốn làm không? – willoller
Tôi cần tìm kiếm, sắp xếp và thao tác phức tạp khác bằng cách sử dụng Array về cơ bản để sử dụng nó trong thuật toán. Vì vậy, tôi cần phải biết cái nào tốt hơn và nhanh hơn. – Imrul