라라벨 컬렉션

Code 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 ){

            apPrint($key,"val0");                

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

                apPrint($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' 카테고리의 다른 글

라라벨 DB Eloquent ORM  (0) 2018.11.16
라라벨 DB 빌더  (0) 2018.11.16
라라벨 컬렉션  (0) 2018.11.16
Visual studio code 사용법  (0) 2018.11.13
[W3Schools] PHP 정리  (0) 2018.11.09
[W3School] Bootstrap 정리  (0) 2018.11.08
Posted by 코덴스

댓글을 달아 주세요