該庫不在主動發展中。其他各種館藏庫提供了我們需要的大多數功能。
錯誤僅修復。
ArrayObject是一個PHP庫,提供了一個輕巧的接口,用於流利地使用數組。
ArrayObject提供了圍繞PHP內置array類型的包裝器,其中包括用於過濾和檢索項目的方法,並方便地將單個項目和集合視為相同的對象。
這對於使用API請求的JSON響應特別有用。
超級HTTP客戶端使用此庫來使從響應超級直觀的響應中提取數據。
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 ();下面的示例基於以下輸入數據。
{
"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 ; // 1注意:所有方法都優雅地處理單個項目作為數組。
get()方法允許您獲取屬性的值,並在不存在該值時接收默認值。它還支持深度. :
$ 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"您還可以使用對象屬性語法(我們過載__get()實現此目的)來獲取屬性:
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException 當通過get('some.key')是一個數組時,將其裝在ArrayObject的實例中。但是, getRaw()方法在返回的值上沒有執行任何“拳擊”。
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" set()方法允許您使用點符號設置屬性。它將自動創建基礎數組結構:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value當$onlyIfExists標誌以true方式傳遞時,只有在密鑰已經存在的情況下,它才會設置該屬性。
類似於get() ,但是當找不到鍵時,會拋出InvalidPropertyException 。
要測試存在元素的存在,請使用has()方法:
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false 通過將回調傳遞給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" ;
}如果您有一個項目,它仍然有效。
由於ArrayObject實現了迭代界面,因此您可以簡單地在對像上foreach() 。這適用於單個項目或收藏。
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}返回一個包含拔出財產的新系列。
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] 返回一系列新的摘要財產。這提供了pluck($key)->toArray()的快捷方式:
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] 您可以撥打計數任何節點:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1注意:當單個項目(即,不是集合)調用時,它將返回1。
當收集至少包含一個項目時,返回true。
$ obj -> hasItems ();注意:當單個項目(即。不是集合)時,它將返回true
應用回調或“在哪裡”條件的數組,僅返回匹配的項目。
使用回調,每個項目都是ArrayObject的實例:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});您還可以使用數組指定條件列表:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]);獲取原始數組可以通過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' ] ] ] 返回基礎數組的JSON編碼字符串:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` 確定基礎陣列是否是集合。
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false 在集合的開始中添加一個或多個項目。如果數組當前不是集合,它將轉換為帶有一個元素的集合。
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); 注意:您可以將ArrayObject作為值傳遞。
從集合中摘下第一項。
如果數組當前不是集合,它將轉換為帶有一個元素的集合。
$ item = $ obj -> shift (); // ArrayObject 在集合的末尾添加一個或多個項目。如果數組當前不是集合,它將轉換為帶有一個元素的集合。
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); 注意:您可以將ArrayObject作為值傳遞。
從集合中刪除最後一項。
如果數組當前不是集合,它將轉換為帶有一個元素的集合。
$ item = $ obj -> pop (); // ArrayObject 歡迎捐款,請提交抽拉賽或創建問題。您提交的代碼應使用PSR-1/PSR-2標准進行格式。