Esta biblioteca não está em desenvolvimento ativo. Várias outras bibliotecas de coleta fornecem a maioria das funcionalidades necessárias para fora da caixa.
Apenas correções de bug.
ArrayObject é uma biblioteca PHP que fornece uma interface leve para trabalhar fluentemente com o Array.
O ArrayObject fornece um invólucro em torno do tipo de array embutido do PHP, que inclui métodos para filtragem e recuperação de itens e trata convenientemente itens e coleções individuais como o mesmo objeto.
Isso é especialmente útil para trabalhar com respostas JSON das solicitações da API.
Esta biblioteca é usada pelo cliente Hyper HTTP para criar dados de extração de respostas super intuitivas.
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 ();Os exemplos abaixo são baseados nos seguintes dados 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 os métodos lidam graciosamente no tratamento de um item individual como uma matriz.
O método get() permite buscar o valor de uma propriedade e receber um padrão se o valor não existir. Também suporta profundidade indicada com 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" Você também pode buscar as propriedades usando a sintaxe da propriedade do objeto (nós sobrecarregamos __get() para conseguir isso):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException Quando um valor buscado via get('some.key') é uma matriz, ele é encaixotado em uma instância do ArrayObject . O método getRaw() , no entanto, não executa nenhum 'boxe' no valor retornado.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" O método set() permite definir uma propriedade usando a notação de pontos. Ele criará automaticamente a estrutura de matriz subjacente:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value Quando o sinalizador $onlyIfExists é aprovado como true , ele apenas definirá essa propriedade se a chave já existir.
Semelhante ao get() , mas lançará um InvalidPropertyException quando a chave não for encontrada.
Para testar a existência de um elemento, use o método has() :
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false O loop sobre uma coleção pode ser alcançado passando um retorno de chamada para 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" ;
}Se você tem um único item, ele ainda funciona.
Como ArrayObject implementa uma interface do iterador, você pode simplesmente foreach() sobre o objeto. Isso funciona para itens ou coleções únicas.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}Retorna uma nova coleção que contém a propriedade arrancada.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] Retorna uma nova matriz da propriedade arrancada. Isso fornece um atalho de pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] Você pode chamar a contagem de qualquer nó:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1Nota: Quando chamado em um único item (ou seja, não é uma coleção), ele retornará 1.
Retorna true quando a coleção contém pelo menos um item.
$ obj -> hasItems ();Nota: Quando chamado em um único item (ou seja, não é uma coleção), ele retornará verdadeiro
Aplique um retorno de chamada ou uma matriz de condições "onde" e retorne apenas itens que correspondem.
Usando um retorno de chamada, cada item é uma instância do ArrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});Você também pode especificar uma lista de condições usando uma matriz:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); Obter a matriz original está disponível no 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' ] ] ] Retorna uma sequência codificada JSON da matriz subjacente:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` Determina se a matriz subjacente é uma coleção.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false Adiciona um ou mais itens ao início da coleção. Se a matriz não for atualmente uma coleção, ela será convertida em uma coleção com um elemento.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Nota: Você pode passar como ArrayObject como valores.
Puxa o primeiro item da coleção.
Se a matriz não for atualmente uma coleção, ela será convertida em uma coleção com um elemento.
$ item = $ obj -> shift (); // ArrayObject Adiciona um ou mais itens ao final da coleção. Se a matriz não for atualmente uma coleção, ela será convertida em uma coleção com um elemento.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Nota: Você pode passar como ArrayObject como valores.
Puxa o último item da coleção.
Se a matriz não for atualmente uma coleção, ela será convertida em uma coleção com um elemento.
$ item = $ obj -> pop (); // ArrayObject As contribuições são bem-vindas, envie uma solicitação de tração ou crie um problema. Seu código enviado deve ser formatado usando os padrões PSR-1/PSR-2.