이 라이브러리는 적극적으로 개발되지 않았습니다. 다양한 다른 컬렉션 라이브러리는 우리가 필요로하는 대부분의 기능을 제공합니다.
버그 수정 만.
ArrayObject는 배열과 유창하게 작동하기위한 가벼운 인터페이스를 제공하는 PHP 라이브러리입니다.
ArrayObject는 필터링 및 항목 검색 방법을 포함하는 PHP의 내장 array 유형 주위에 래퍼를 제공하며 개별 항목과 컬렉션을 동일한 객체로 편리하게 처리합니다.
이는 API 요청에서 JSON 응답으로 작업하는 데 특히 유용합니다.
이 라이브러리는 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() 메소드를 사용하면 속성 값을 가져오고 값이 존재하지 않으면 기본값을받을 수 있습니다. 또한 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" 객체 속성 구문을 사용하여 속성을 가져올 수도 있습니다 (이를 달성하기 위해 __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() 메소드를 사용하면 DOT 표기법을 사용하여 속성을 설정할 수 있습니다. 기본 배열 구조를 자동으로 생성합니다.
$ 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 표준을 사용하여 포맷해야합니다.