Esta biblioteca no está en desarrollo activo. Varias otras bibliotecas de recolección proporcionan la mayoría de las funcionalidades que necesitamos de la caja.
Solamente corrige el error.
ArrayObject es una biblioteca PHP que proporciona una interfaz de peso ligero para trabajar con fluidez con la matriz.
ArrayObject proporciona un envoltorio alrededor del tipo de array incorporado de PHP que incluye métodos para filtrar y recuperar elementos, y trata convenientemente elementos y colecciones individuales como el mismo objeto.
Esto es especialmente útil para trabajar con respuestas JSON de las solicitudes de API.
El cliente Hyper HTTP utiliza esta biblioteca para hacer que la extracción de datos de las respuestas sea súper intuitiva.
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 ();Los ejemplos a continuación se basan en los siguientes datos de entrada.
{
"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 ; // 1Nota: Todos los métodos manejan con gracia el tratamiento de un elemento individual como una matriz.
El método get() le permite obtener el valor de una propiedad y recibir un valor predeterminado si el valor no existe. También admite la profundidad que se indica con 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" También puede obtener las propiedades utilizando la sintaxis de la propiedad del objeto (sobrecargamos __get() para lograr esto):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException Cuando un valor obtenido a través de get('some.key') es una matriz, se encaja en una instancia de ArrayObject . Sin embargo, el método getRaw() no realiza ningún 'boxeo' en el valor devuelto.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" El método set() le permite establecer una propiedad usando notación de puntos. Creará automáticamente la estructura de matriz subyacente:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value Cuando la bandera de $onlyIfExists se pasa como true , solo establecerá esa propiedad si la clave ya existe.
Similar a get() pero lanzará una InvalidPropertyException cuando no se encuentra la clave.
Para probar la existencia de un elemento, use el método has() :
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false El bucle sobre una colección se puede lograr pasando una devolución de llamada a 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 tiene un solo artículo, todavía funciona.
Dado que ArrayObject implementa una interfaz iteradora, simplemente puede foreach() sobre el objeto. Esto funciona para artículos o colecciones individuales.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Devuelve una nueva colección que contiene la propiedad arrancada.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] Devuelve una nueva matriz de la propiedad arrancada. Esto proporciona un acceso directo de pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] Puede llamar al recuento de cualquier nodo:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1Nota: Cuando se le pide a un solo elemento (es decir, no una colección), devolverá 1.
Devuelve verdadero cuando la colección contiene al menos un elemento.
$ obj -> hasItems ();Nota: Cuando se le pide a un solo elemento (es decir, no una colección), devolverá verdadero
Aplique una devolución de llamada o una variedad de condiciones "donde", y solo devuelva elementos que coincidan.
Usando una devolución de llamada, cada elemento es una instancia de ArrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});También puede especificar una lista de condiciones utilizando una matriz:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); Obtener la matriz original está disponible a través del método 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' ] ] ] Devuelve una cadena codificada JSON de la matriz subyacente:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` Determina si la matriz subyacente es una colección.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false Agrega uno o más elementos al comienzo de la colección. Si la matriz no es actualmente una colección, se convertirá en una colección con un elemento.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Nota: puede pasar los valores de ArrayObject .
Extrae el primer elemento de la colección.
Si la matriz no es actualmente una colección, se convertirá en una colección con un elemento.
$ item = $ obj -> shift (); // ArrayObject Agrega uno o más elementos al final de la colección. Si la matriz no es actualmente una colección, se convertirá en una colección con un elemento.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Nota: puede pasar los valores de ArrayObject .
Extrae el último artículo de la colección.
Si la matriz no es actualmente una colección, se convertirá en una colección con un elemento.
$ item = $ obj -> pop (); // ArrayObject Las contribuciones son bienvenidas, envíe una solicitud de extracción o cree un problema. Su código enviado debe formatearse utilizando estándares PSR-1/PSR-2.