このライブラリはアクティブな開発にありません。他のさまざまなコレクションライブラリは、箱から出して必要なほとんどの機能を提供します。
バグ修正のみ。
ArrayObjectは、配列と流fluentに作業するための軽量インターフェイスを提供するPHPライブラリです。
ArrayObjectは、フィルタリングと取得の方法を含むPHPの組み込みarrayタイプに関するラッパーを提供し、個々のアイテムとコレクションを同じオブジェクトとして便利に扱います。
これは、APIリクエストからJSON応答を使用するのに特に役立ちます。
このライブラリは、Hyper 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()メソッドを使用すると、プロパティの値を取得し、値が存在しない場合はデフォルトを受信できます。また、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"また、オブジェクトプロパティ構文を使用してプロパティを取得することもできます( __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()メソッドを使用すると、DOT表記を使用してプロパティを設定できます。基礎となる配列構造が自動的に作成されます。
$ 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 Iteratorインターフェイスを実装するため、オブジェクトを介して単純に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が返されます。
コレクションに少なくとも1つのアイテムが含まれている場合、trueを返します。
$ obj -> hasItems ();注:単一のアイテム(つまり、コレクションではなく)で呼び出されると、trueが返されます
コールバック、または「WHERE」条件の配列のいずれかを適用し、一致するアイテムのみを返します。
コールバックを使用すると、各アイテムは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 コレクションの開始に1つ以上のアイテムを追加します。アレイが現在コレクションでない場合、1つの要素を持つコレクションに変換されます。
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); 注: ArrayObjectの値を値として渡すことができます。
最初のアイテムをコレクションから引き出します。
アレイが現在コレクションでない場合、1つの要素を持つコレクションに変換されます。
$ item = $ obj -> shift (); // ArrayObject コレクションの最後に1つ以上のアイテムを追加します。アレイが現在コレクションでない場合、1つの要素を持つコレクションに変換されます。
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); 注: ArrayObjectの値を値として渡すことができます。
最後のアイテムをコレクションから引き出します。
アレイが現在コレクションでない場合、1つの要素を持つコレクションに変換されます。
$ item = $ obj -> pop (); // ArrayObject 貢献を歓迎します。プルレクエストを提出するか、問題を作成してください。提出されたコードは、PSR-1/PSR-2標準を使用してフォーマットする必要があります。