Diese Bibliothek ist nicht in aktiver Entwicklung. Verschiedene andere Sammlungsbibliotheken bieten die meisten Funktionen, die wir außerhalb der Box benötigen.
Nur Fehlerbehebungen.
ArrayObject ist eine PHP-Bibliothek, die eine leichte Schnittstelle für fließende Arbeiten mit Array bietet.
ArrayObject bietet einen Wrapper um den integrierten array -Typ von PHP, der Methoden zum Filtern und zum Abrufen von Gegenständen enthält und einzelne Elemente und Sammlungen als das gleiche Objekt behandelt.
Dies ist besonders nützlich für die Arbeit mit JSON -Antworten aus API -Anfragen.
Diese Bibliothek wird vom Hyper -HTTP -Client verwendet, um Daten aus Antworten extrahieren zu lassen.
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 ();Die folgenden Beispiele basieren auf den folgenden Eingabedaten.
{
"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 ; // 1HINWEIS: Alle Methoden verarbeiten anmutig die Behandlung eines einzelnen Elements als Array.
Mit der get() -Methode können Sie den Wert einer Eigenschaft abrufen und einen Standard erhalten, wenn der Wert nicht vorhanden ist. Es unterstützt auch die Tiefe, die mit a angezeigt wird . :
$ 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" Sie können die Eigenschaften auch mithilfe der Objekteigenschaftssyntax abrufen (wir überladen __get() um dies zu erreichen):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException Wenn ein Wert, der per get('some.key') abgerufen wird, ein Array ist, wird er in eine Instanz von ArrayObject eingebunden. Die getRaw() -Methode führt jedoch keine "Boxen" für den zurückgegebenen Wert durch.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" Mit der Methode set() können Sie eine Eigenschaft mithilfe der Punktnotation festlegen. Es wird automatisch die zugrunde liegende Array -Struktur erstellt:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value Wenn die Flagge $onlyIfExists als true bestanden wird, wird diese Eigenschaft nur festgelegt, wenn der Schlüssel bereits vorhanden ist.
Ähnlich wie get() wirft aber eine InvalidPropertyException , wenn der Schlüssel nicht gefunden wird.
Verwenden Sie die has() -Methode: Um auf die Existenz eines Elements zu testen:
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false Das Schleifen über eine Sammlung kann erreicht werden, indem ein Rückruf an each() weitergegeben wird:
$ 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" ;
}Wenn Sie einen einzelnen Artikel haben, funktioniert es immer noch.
Da ArrayObject eine Iterator -Schnittstelle implementiert, können Sie einfach über das Objekt foreach() . Dies funktioniert für einzelne Elemente oder Sammlungen.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Gibt eine neue Sammlung zurück, die das gezupfte Eigentum enthält.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] Gibt ein neues Array des gezupften Eigentums zurück. Dies liefert eine Abkürzung von pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] Sie können Count von jedem Knoten anrufen:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1Hinweis: Wenn ein einzelner Artikel aufgerufen wird (dh keine Sammlung), wird 1 zurückgegeben.
Gibt true zurück, wenn die Sammlung mindestens einen Artikel enthält.
$ obj -> hasItems ();Hinweis: Wenn ein einzelner Artikel aufgerufen wird (dh keine Sammlung), wird es wahr zurückgegeben
Wenden Sie entweder einen Rückruf oder eine Reihe von "Where" -Bedingungen an und geben Sie nur Elemente zurück, die übereinstimmen.
Mit einem Rückruf ist jedes Element eine Instanz von ArrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});Sie können auch eine Liste von Bedingungen mit einem Array angeben:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); Das Erhalten des ursprünglichen Arrays ist über die Methode toArray() erhältlich:
$ 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' ] ] ] Gibt eine JSON -codierte Zeichenfolge des zugrunde liegenden Arrays zurück:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` Bestimmt, ob das zugrunde liegende Array eine Sammlung ist.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false Fügt dem Beginn der Sammlung einen oder mehrere Elemente hinzu. Wenn das Array derzeit keine Sammlung ist, wird es mit einem Element in eine Sammlung umgewandelt.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Hinweis: Sie können die Werte von ArrayObject übergeben.
Zieht den ersten Artikel aus der Sammlung.
Wenn das Array derzeit keine Sammlung ist, wird es mit einem Element in eine Sammlung umgewandelt.
$ item = $ obj -> shift (); // ArrayObject Fügt ein oder mehrere Elemente am Ende der Sammlung hinzu. Wenn das Array derzeit keine Sammlung ist, wird es mit einem Element in eine Sammlung umgewandelt.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Hinweis: Sie können die Werte von ArrayObject übergeben.
Zieht den letzten Artikel aus der Sammlung.
Wenn das Array derzeit keine Sammlung ist, wird es mit einem Element in eine Sammlung umgewandelt.
$ item = $ obj -> pop (); // ArrayObject Beiträge sind willkommen. Bitte geben Sie eine Pull-Request ein oder erstellen Sie ein Problem. Ihr eingereichter Code sollte mit PSR-1/PSR-2-Standards formatiert werden.