Giới thiệu về lớp ArrayObject
ArrayObject
là một lớp của SPL,
cho phép bạn tạo ra các đối tượng có cách truy cập dữ liệu tương tự mảng và định nghĩa sẵn các hàm cơ bản,
trong SPL lớp ArrayObject được triển khai gồm các hằng, phương thức kế thừa
từ các giao diện IteratorAggregate , ArrayAccess , Serializable , Countable - khai báo của nó như sau:
ArrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable { /* Constants */ const integer STD_PROP_LIST = 1 ; const integer ARRAY_AS_PROPS = 2 ; /* Methods */ public __construct ([ mixed $input = array() [, int $flags = 0 [, string $iterator_class = "ArrayIterator" ]]] ) public append ( mixed $value ) : void public asort ( void ) : void public count ( void ) : int public exchangeArray ( mixed $input ) : array public getArrayCopy ( void ) : array public getFlags ( void ) : int public getIterator ( void ) : ArrayIterator public getIteratorClass ( void ) : string public ksort ( void ) : void public natcasesort ( void ) : void public natsort ( void ) : void public offsetExists ( mixed $index ) : bool public offsetGet ( mixed $index ) : mixed public offsetSet ( mixed $index , mixed $newval ) : void public offsetUnset ( mixed $index ) : void public serialize ( void ) : string public setFlags ( int $flags ) : void public setIteratorClass ( string $iterator_class ) : void public uasort ( callable $cmp_function ) : void public uksort ( callable $cmp_function ) : void public unserialize ( string $serialized ) : void }
Tạo đối tượng lớp ArrayObject
Bạn khởi tạo đối tượng ArrayObject với toán tử new
, có thể truyền tham số là mảng dữ liệu khởi tạo,
hoặc không tham số để khởi tạo đối tượng chưa có phần tử nào.
Để truy cập và gán giá trị vào mảng dùng ký hiệu []
$ar = new \ArrayObject();
$data = ['A', 'B', 'C']; // Khởi tạo từ mảng dữ liệu $ar = new ArrayObject($data); // Đọc và gán giá trị mảng sử dụng ký hiệu [] $value = $ar[1]; $ar[10] = 'X'; $ar[] = 'G'; // Thêm phần tử vào cuối
* Lưu ý: nếu PHP Array thông thường đã đủ đáp ứng yêu cầu của bạn, thì vẫn có nhiều lợi ích khi chuyển sang ArrayObject như nhanh hơn khi dùng nó làm tham số truyền qua lại giữa các hàm ... ngoài ra nó cung cấp các hàm xử lý cho mảng riêng.
Các phương thức của ArrayObject
Những hàm cơ bản của đối tượng lớp ArrayObject
Hàm | Diễn tả |
---|---|
ArrayObject::count |
Trả về tổng số phần tử của mảng |
ArrayObject::getArrayCopy |
Lấy mảng Array từ đối tượng ArrayObject
$ar = new ArrayObject(); $ar[1] = 'A'; $ar[] = 'B'; $array = $ar->getArrayCopy(); var_dump($array); //Kết quả array(2) { [1] => string(1) "A" [2] => string(1) "B" } |
ArrayObject::append |
Thêm phần tử mới vào cuối mảng
$data = ['A', 'B', 'C']; $ar = new ArrayObject($data); $ar->append('D'); var_dump($ar); // Kết quả class ArrayObject#1 (1) { private $storage => array(4) { [0] => string(1) "A" [1] => string(1) "B" [2] => string(1) "C" [3] => string(1) "D" } } |
ArrayObject::asort |
Sắp xếp mảng theo giá trị, trong đó các key giữ nguyên cho các phần tử như mảng ban đầu
$data = ['XuanThuLab', 'Access', 10 => 'Bitmap']; $ar = new ArrayObject($data); $ar->asort(); var_dump($ar); //Kết quả class ArrayObject#1 (1) { private $storage => array(3) { [1] => string(6) "Access" [10] => string(6) "Bitmap" [0] => string(10) "XuanThuLab" } } // Phần tử có giá trị 'Bitmap' ở cuối, có index là 10, // sau sắp xếp nó ở vị trí thứ 2 của mảng, nhưng index vẫn là 10 |
ArrayObject::ksort |
Sắp xếp mảng theo key |
ArrayObject::exchangeArray |
Thay thế dữ liệu bằng dữ liệu liệu từ mảng khác, từ ArrayObject khác, trả về dữ liệu cũ
$data1 = ['A', 'B', 'C']; $ar = new ArrayObject($data1); $data2 = ['X', 'Y']; $old = $ar->exchangeArray($data2); var_dump($ar); var_dump($old); //Kết quả class ArrayObject#1 (1) { private $storage => array(2) { [0] => string(1) "X" [1] => string(1) "Y" } } array(3) { [0] => string(1) "A" [1] => string(1) "B" [2] => string(1) "C" } |
ArrayObject::getIterator |
Lấy đối tượng ArrayIterator, xem thêm Giao diện Iterator |
ArrayObject::offsetExists |
Kiểm tra một key, index có tồn tại không - tham số là chỉ số phần tử |
ArrayObject::offsetGet |
Lấy giá trị phần tử theo chỉ số, nếu phần tử không tồn tại trả về NULL |
ArrayObject::offsetSet |
Gán giá trị cho phần tử theo chỉ số offsetSet($index,$value) |
ArrayObject::offsetUnset |
Xóa phần tử theo chỉ số |
ArrayObject::serialize |
Tạo chuỗi Serialize để lưu trữ mảng, chuỗi này có thể để phục hồi bằng hàm unserialize |
ArrayObject::unserialize |
Phục hồi giá trị từ chuỗi serialize |
ArrayObject::uasort |
Sắp xếp mảng theo giá trị, hàm so sánh để sắp xếp tự định nghĩa, hàm này nhận tham số là hai giá
trị để so sánh, ví dụ:
Xem thêm về Callbacks / Callables trong PHP $data1 = ['A', 'B123', 'C2']; $ar = new ArrayObject($data1); // Xây dựng hàm callback so sánh độ dài 2 chuối // true nếu chuỗi a dài hơn chuỗi b $callbacksosanh = function($a, $b) { return strlen($a) > strlen($b); }; // Sắp xếp theo độ dài của chuỗi giá trị $ar->uasort($callbacksosanh); var_dump($ar); //Kết quả class ArrayObject#1 (1) { private $storage => array(3) { [0] => string(1) "A" [2] => string(2) "C2" [1] => string(4) "B123" } } |
ArrayObject::uksort |
Sắp xếp mảng theo key, hàm so sánh tự định nghĩa, xem phần ArrayObject::uasort |