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 |