Perpustakaan ini tidak dalam pengembangan aktif. Berbagai pustaka koleksi lainnya menyediakan sebagian besar fungsionalitas yang kita butuhkan di luar kotak.
Perbaikan bug saja.
ArrayObject adalah perpustakaan PHP yang menyediakan antarmuka dengan berat untuk bekerja dengan lancar dengan array.
ArrayObject menyediakan pembungkus di sekitar tipe array bawaan PHP yang mencakup metode untuk penyaringan, dan pengambilan item, dan dengan mudah memperlakukan item dan koleksi individual sebagai objek yang sama.
Ini sangat berguna untuk bekerja dengan tanggapan JSON dari permintaan API.
Perpustakaan ini digunakan oleh klien Hyper HTTP untuk membuat pengekstraksi data dari respons super intuitif.
composer require rexlabs/array-object <?php
require ' vendor/autoload.php ' ;
use Rexlabs ArrayObject ArrayObject ;
// Initialise from an Array
$ obj = ArrayObject:: fromArray ([...]);
// Initialise from a JSON encoded string
$ obj = ArrayObject:: fromJson ( $ str );
// Output to array
$ arr = $ obj -> toArray ();
// Output to JSON encoded string
$ json = $ obj -> toJson ();Contoh di bawah ini didasarkan pada data input berikut.
{
"books" : [
{
"id" : 1 ,
"title" : " 1984 " ,
"author" : " George Orwell "
},
{
"id" : 2 ,
"title" : " Pride and Prejudice " ,
"author" : " Jane Austen "
}
]
} $ obj -> books ; // Instance of ArrayObject
$ obj -> books -> pluckArray ( ' author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ obj -> pluckArray ( ' books.author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ obj -> books -> count (); // 2
$ obj -> books -> isCollection (); // true
$ obj -> books [ 0 ]; // Instance of ArrayObject
$ obj -> books [ 0 ]-> isCollection (); // false
$ obj -> books [ 0 ]-> id ; // 1Catatan: Semua metode menangani dengan anggun memperlakukan item individual sebagai array.
Metode get() memungkinkan Anda untuk mengambil nilai properti, dan menerima default jika nilainya tidak ada. Ini juga mendukung kedalaman yang ditunjukkan dengan a . :
$ obj -> get ( ' books.0 ' ); // ArrayObject
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> get ( ' books.1.title ' ); // "Pride and Prejudice"
$ obj -> get ( ' books.0.missing ' , ' Default value ' ); // "Default value" Anda juga dapat mengambil properti menggunakan sintaks properti objek (kami kelebihan __get() untuk mencapai ini):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException Ketika nilai yang diambil melalui get('some.key') adalah array, itu dikotak menjadi contoh ArrayObject . Metode getRaw() , bagaimanapun, tidak melakukan 'tinju' pada nilai yang dikembalikan.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" Metode set() memungkinkan Anda untuk mengatur properti menggunakan notasi titik. Ini akan secara otomatis membuat struktur array yang mendasarinya:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value Ketika bendera $onlyIfExists dilewatkan sebagai true , itu hanya akan mengatur properti itu jika kunci sudah ada.
Mirip dengan get() tetapi akan melempar InvalidPropertyException ketika kunci tidak ditemukan.
Untuk menguji keberadaan suatu elemen, gunakan metode has() :
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false Looping di atas koleksi dapat dicapai dengan memberikan panggilan balik ke each() :
$ obj -> books -> each ( function ( $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
});
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Jika Anda memiliki satu item, itu masih berfungsi.
Karena ArrayObject mengimplementasikan antarmuka iterator, Anda dapat dengan mudah foreach() di atas objek. Ini berfungsi untuk item atau koleksi tunggal.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Mengembalikan koleksi baru yang berisi properti yang dipetik.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] Mengembalikan serangkaian properti baru yang dipetik. Ini menyediakan jalan pintas dari pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] Anda dapat menghubungi Hitung Node apa pun:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1Catatan: Ketika dipanggil pada satu item (mis. Bukan koleksi), itu akan mengembalikan 1.
Mengembalikan true ketika koleksi berisi setidaknya satu item.
$ obj -> hasItems ();Catatan: Saat dipanggil pada satu item (yaitu. Bukan koleksi), itu akan mengembalikan true
Terapkan salah satu panggilan balik, atau serangkaian kondisi "di mana", dan hanya mengembalikan item yang cocok.
Menggunakan panggilan balik, setiap item adalah contoh arrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});Anda juga dapat menentukan daftar kondisi menggunakan array:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); Mendapatkan array asli tersedia melalui metode toArray() :
$ obj -> books [ 0 ]-> toArray (); // [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ]
$ obj -> get ( 1 )-> toArray (); // [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ]
$ obj -> books -> toArray (); // [ [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ], [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ] ]
$ obj -> toArray (); // [ 'books' => [ [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ], [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ] ] ] Mengembalikan string yang dikodekan JSON dari array yang mendasarinya:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` Menentukan apakah array yang mendasarinya adalah koleksi.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false Menambahkan satu atau lebih item pada awal koleksi. Jika array saat ini bukan koleksi, itu akan dikonversi ke koleksi dengan satu elemen.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Catatan: Anda dapat meneruskan ArrayObject sebagai nilai sebagai nilai.
Tarik item pertama dari koleksi.
Jika array saat ini bukan koleksi, itu akan dikonversi ke koleksi dengan satu elemen.
$ item = $ obj -> shift (); // ArrayObject Menambahkan satu atau lebih item ke akhir koleksi. Jika array saat ini bukan koleksi, itu akan dikonversi ke koleksi dengan satu elemen.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Catatan: Anda dapat meneruskan ArrayObject sebagai nilai sebagai nilai.
Tarik item terakhir dari koleksi.
Jika array saat ini bukan koleksi, itu akan dikonversi ke koleksi dengan satu elemen.
$ item = $ obj -> pop (); // ArrayObject Kontribusi dipersilakan, silakan kirimkan permintaan tarik atau buat masalah. Kode yang Anda kirim harus diformat menggunakan standar PSR-1/PSR-2.