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

Đăng ký nhận bài viết mới