라라벨 컬렉션

Code/PHP 2018. 11. 16. 15:34

 

 Laravel Collection

 

https://laravel.com/docs/5.7/collections#available-methods

https://laravel.kr/docs/5.5/eloquent-collections

 

 

* 콜렉션 생성

- [ ] 에 주의!!

$col = collect( [ 1, "two", 3 ] );

 

- 배열(Array)를 컬렉션으로 만들기(변환)

$arr = Array(1,2,3);

$col = collect($arr);

 

 

//==========

* 전체 갯수

$count = $col->count();//전제 요소 갯수

 

 

//============

* 배열로 변환

- echo 로 출력하면 all(), toArray() 가 동일하지만

- 다른점 : all()는 모든 데이터를 반환하지만

toArray()는 배열로 변화할수 있는 것만 변화해서 반환

Eloquent ORM에서 결과가 다름

 

echo $col->all();

echo $col->toArray();

 

 

 

//========================

* 컬렉션 전체 아이템 지우기(삭제,제거)

- 간단

$col = collect([]);

 

- shift 사용

while(count($col)) {

$col->shift();

//$col->forget(0);

}

 

//==========

* reject(콜백) 

콜백함수(클로저)만족하는 아이템 제거한 컬렉션 반환

$collection = collect([1, 2, 3, 4]);

$filtered = $collection->reject(function ($value, $key) {

    return $value > 2;

});

$filtered->all();

//결과값 =  [1, 2]

 

 

* filter(콜백) : 남김 , 원본 변화 없음

* reject(콜백) : 제거 , 원본 변화 없음

 

 

* slice(숫자) :  앞에서 숫자만큼을 자름

* take(숫자) :  앞에서 숫자만큼을 취함

 

 

* except(키 컬렉션)

- 지정한 키들을 제외한 컬렉션을 반환

 

 

//==========

< 삭제 >

* forget(키) : 해당 키의 아이템을 삭제, 반환 없음

* pull(키) : 해당 키의 아이템을 반환하고 삭제

* shift() : 첫 번째 아이템을 제거하고 해당 값을 반환

 

< 추가 >

* push(값) : 마지막에 값을 추가

- 키/값 구조가 아닌 경우만 사용

* put(키,값) : 마지막에 추가

 

 

//==========

* sort() : 컬렉션 정렬

 

 

 

//====================

* 메서드 체이닝

$col = collect( [ 1, 'two', '', '사', null, 6 ] );

->map(function($name){

return strtoupper($name);

})

->reject(tunction ($name){

return is_numeric($name);

});

 

 

 

//=========================

* 다차원 컬렉션

- 배열과 동일하게 다룸

- [ ] 에 주의!!

 

        $col = collect( [

            ['product_id' => 1, 'price' => 200, 'discount' => '50'], 

            ['product_id' => 2, 'price' => 400, 'discount' => '50'],

        ] ); 

        foreach($col as $key => $val ){

            print($key,"val0");                

            foreach($val as $key2 => $val2 ){

                print($key2." => ".$val2,"val");

            }

        }

 

//=======================

< 전체 작업(콜백, 클로저) >

* map()

- 컬렉션 전체를, 콜백에 값을 전달

- 자신은 변화되지 않음

- 새로운 컬렉션을 생성, 

$collection = collect([1, 2, 3, 4, 5]);

$multiplied = $collection->map(function ($item, $key) {

    return $item * 2;

});

$multiplied->all();

//결과값 =  [2, 4, 6, 8, 10]

 

 

* transform() : 

- 콜백에 값을 전달, 

- 자신을 변화 시킴

$collection = collect([1, 2, 3, 4, 5]);

$collection->transform(function ($item, $key) {

    return $item * 2;

});

$collection->all();

// [2, 4, 6, 8, 10]

 

 

* each() : 

콜백(클로저)에 값을 전달, 

중간에 나가기 가능

$collection = $collection->each(function ($item, $key) {

    if (/* some condition */) {

        return false;//나가기

    }

});

 

* every(콜백)

- 모든 요소가 조건을 만족하는지 검사, 리턴값:true, false

 

* when(bool, 콜백)

- bool이 참이면 콜백 실행

$collection = collect([1, 2, 3]);

$collection->when(true, function ($collection) {

    return $collection->push(4);

});

// [1, 2, 3, 4]

 

 

//==========================

* tap() : 컬렉션에 영향을 주지 않고 특정 지점에 대해서 어떤 작업을 수행

collect([2, 4, 3, 1, 5])

    ->sort()

    ->tap(function ($collection) {

        Log::debug('Values after sorting', $collection->values()->toArray());

    })

    ->shift();

 

// 1

 

 

 

 

//===========================

< 검색 >

* search(키) : 맨처음 발견한 아이템의 키값

$names = collect(['Alex', 'John', 'Jason', 'Martyn', 'Hanlin']);

$names->search('Jason');

// 2

 

$names->search(function($value, $key) {

    return strlen($value) == 6;

}); 

// 결과 :  3

 

 

* contains(값) : 아이템을 포함하고 있는지 판단

$collection = collect(['name' => 'Desk', 'price' => 100]);

$collection->contains('Desk');

// true

$collection->contains('New York');

// false

 

 

* get(키, 기본값) : 키에 대한 아이템 값을 반환, 없으면 null, 기본값 설정 가능

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);

$value = $collection->get('foo', 'default-value');

// default-value

 

 

 

//=======================================================

< 주요 메소드(method) > 

 

 

* plunk(키)

:  키에 해당하는 모든 값을 반환

 

$collection = collect([

    ['id' => 'prod-100', 'name' => 'Desk'],    ['id' => 'prod-200', 'name' => 'Chair'],

]);

$plucked = $collection->pluck('name');

$plucked->all();

//반환값 =  ['Desk', 'Chair']

 

 

 

//====================

* chunk() : 일정 크기의 다차원 컬렉션 만듬

 

* zip() : 합치기

$collection = collect(['Chair', 'Desk']);

$zipped = $collection->zip([100, 200]);

$zipped->all();

// [['Chair', 100], ['Desk', 200]]

 

 

* pipe() : 콜백에 전달하고 그 결과를 반환

$collection = collect([1, 2, 3]);

$piped = $collection->pipe(function ($collection) {

    return $collection->sum();

});

// 6

 

 

 

//==================

< SQL 유사 >

* first() : 첫번째 값 반환

 

* take(숫자) : 숫자만큼의 아이템을 앞에서 부터 취해서 새 컬렉션을 만들어 반환

- SQL의 LIMIT

 

//

where(키, 값) : 해당 컬렉션을 반환

whereIn(키, [값...값]) : 여러값을 지정 가능

whereNotIn() : whereIn의 반대

 

 

//====================

* 집계(Aggregate)함수

 max(), min(), sum(), avg()

 

 

* implode(키, 문자열) : 해당 키의 값들 만을 모아 문자열을 만듬

$collection = collect([

    ['account_id' => 1, 'product' => 'Desk'],

    ['account_id' => 2, 'product' => 'Chair'],

]);

$collection->implode('product', ', ');

// Desk, Chair

 

반응형

'Code > PHP' 카테고리의 다른 글

[라라벨] 로그인 유지 구현 방식  (0) 2019.01.15
라라벨 DB 빌더  (0) 2018.11.16
[W3Schools] PHP 정리  (0) 2018.11.09
[라라벨] POST 예제  (0) 2018.10.14
[라라벨] PHPUnit (2) - HTTP 웹 테스트 예제  (0) 2018.10.11
Posted by codens