Cette bibliothèque n'est pas en développement actif. Diverses autres bibliothèques de collecte offrent la plupart des fonctionnalités dont nous avons besoin.
Correction de bug uniquement.
ArrayObject est une bibliothèque PHP qui fournit une interface légère pour travailler couramment avec les Arrays.
ArrayObject fournit un emballage autour du type array intégré de PHP qui comprend des méthodes de filtrage et de récupération des articles, et traite facilement les éléments et les collections individuels comme le même objet.
Ceci est particulièrement utile pour travailler avec les réponses JSON à partir des demandes d'API.
Cette bibliothèque est utilisée par le client Hyper HTTP pour faire de l'extraction des données de réponses super intuitive.
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 ();Les exemples ci-dessous sont basés sur les données d'entrée de suivi.
{
"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 ; // 1Remarque: Toutes les méthodes gèrent gracieusement le traitement d'un élément individuel comme un tableau.
La méthode get() vous permet de récupérer la valeur d'une propriété et de recevoir une valeur par défaut si la valeur n'existe pas. Il prend également en charge la profondeur qui est indiquée par 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" Vous pouvez également récupérer les propriétés à l'aide de la syntaxe de la propriété d'objet (nous surchargez __get() pour y parvenir):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException Lorsqu'une valeur récupérée via get('some.key') est un tableau, il est enragé dans une instance de ArrayObject . La méthode getRaw() , cependant, n'effectue aucune «boxe» sur la valeur renvoyée.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" La méthode set() vous permet de définir une propriété en utilisant la notation de points. Il créera automatiquement la structure du tableau sous-jacente:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value Lorsque le drapeau $onlyIfExists est passé comme true , il ne définira cette propriété que si la clé existe déjà.
Semblable à get() mais lancera une InvalidPropertyException lorsque la clé n'est pas trouvée.
Pour tester l'existence d'un élément, utilisez la méthode has() :
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false Une boucle sur une collection peut être obtenue en passant un rappel à 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" ;
}Si vous avez un seul élément, cela fonctionne toujours.
Étant donné que ArrayObject implémente une interface Itérator, vous pouvez simplement foreach() sur l'objet. Cela fonctionne pour des éléments uniques ou des collections.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Renvoie une nouvelle collection qui contient la propriété pincée.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] Renvoie une nouvelle gamme de la propriété pincée. Cela fournit un raccourci de pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] Vous pouvez appeler le compte de n'importe quel nœud:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1Remarque: Lorsqu'il est appelé sur un seul élément (c'est-à-dire pas une collection), il reviendra 1.
Renvoie True lorsque la collection contient au moins un élément.
$ obj -> hasItems ();Remarque: Lorsqu'il est appelé sur un seul élément (c'est-à-dire pas une collection), il renverra vrai
Appliquez soit un rappel, soit un tableau de conditions "où", et ne renvoyez que les éléments qui correspondent.
À l'aide d'un rappel, chaque élément est une instance de ArrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});Vous pouvez également spécifier une liste de conditions à l'aide d'un tableau:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); L'obtention du tableau d'origine est disponible via la méthode 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' ] ] ] Renvoie une chaîne encodée JSON du tableau sous-jacent:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` Détermine si le tableau sous-jacent est une collection.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false Ajoute un ou plusieurs articles au début de la collection. Si le tableau n'est pas actuellement une collection, il sera converti en collection avec un élément.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Remarque: vous pouvez passer les valeurs de ArrayObject .
Tire le premier élément de la collection.
Si le tableau n'est pas actuellement une collection, il sera converti en collection avec un élément.
$ item = $ obj -> shift (); // ArrayObject Ajoute un ou plusieurs articles à la fin de la collection. Si le tableau n'est pas actuellement une collection, il sera converti en collection avec un élément.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Remarque: vous pouvez passer les valeurs de ArrayObject .
Tire le dernier élément de la collection.
Si le tableau n'est pas actuellement une collection, il sera converti en collection avec un élément.
$ item = $ obj -> pop (); // ArrayObject Les contributions sont les bienvenues, veuillez soumettre une demande de traction ou créer un problème. Votre code soumis doit être formaté à l'aide des normes PSR-1 / PSR-2.