Эта библиотека не в активной разработке. Различные другие библиотеки сбора предоставляют наибольшую функциональность, которая нам нужна из коробки.
Только исправления ошибок.
ArrayObject-это библиотека PHP, которая обеспечивает легкий интерфейс для свободной работы с массивами.
ArrayObject предоставляет обертку вокруг встроенного типа array PHP, который включает в себя методы фильтрации и получение предметов, и удобно рассматривает отдельные элементы и коллекции как с тем же объектом.
Это особенно полезно для работы с ответами JSON по запросам API.
Эта библиотека используется клиентом 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() позволяет получить значение свойства и получать по умолчанию, если значение не существует. Он также поддерживает глубину, которая обозначена с . :
$ 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() позволяет установить свойство, используя точечную нотацию. Он автоматически создаст основную структуру массива:
$ 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 реализует интерфейс итератора, вы можете просто 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.
Возвращает True, когда коллекция содержит хотя бы один элемент.
$ obj -> hasItems ();Примечание. При вызове на один элемент (т.е. не коллекция), он вернет True
Примените либо обратный вызов, либо массив «где» условия, и возвращайте только элементы, которые соответствуют.
Используя обратный вызов, каждый элемент является экземпляром 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 Добавляет один или несколько элементов в начало коллекции. Если массив в настоящее время не является коллекцией, он будет преобразован в коллекцию с одним элементом.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); Примечание. Вы можете передать ArrayObject как значения.
Вытаскивает первый предмет из коллекции.
Если массив в настоящее время не является коллекцией, он будет преобразован в коллекцию с одним элементом.
$ item = $ obj -> shift (); // ArrayObject Добавляет один или несколько элементов в конце коллекции. Если массив в настоящее время не является коллекцией, он будет преобразован в коллекцию с одним элементом.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); Примечание. Вы можете передать ArrayObject как значения.
Вытаскивает последний предмет из коллекции.
Если массив в настоящее время не является коллекцией, он будет преобразован в коллекцию с одним элементом.
$ item = $ obj -> pop (); // ArrayObject Взносы приветствуются, пожалуйста, отправьте запрос или создайте проблему. Ваш отправленный код должен быть отформатирован с использованием стандартов PSR-1/PSR-2.