라라벨은 collect() 헬퍼를 통해 컬랙션 객체인 Illuminate\Support\Collection 클래스를 생성할 수 있습니다.

생성된 컬렉션 객체는 다양한 메소드를 통해 일관성 있게 다룰 수 있으며 모든 메소드는 체이닝이 가능하므로 연속적으로 메소드를 호출할 수 있습니다.


$collection = collect([1, 'apple', '', 'banana', null, 3]) // 1
	->map(function ($name) {	//2
	    return strtoupper($name);
	})
	->reject(function ($name) {	//3
	    return is_numeric($name);
	})
	->reject(function ($name) {	//4
	    return empty($name);
	});
CODE

위 코드의 동작을 순서대로 설명하면 다음과 같습니다.

  1. collect() 헬퍼로 입력된 배열을 라라벨 컬렉션으로 만들어서 리턴합니다.
  2. map() 메소드는 컬렉션의 모든 요소에 대해 클로저를 호출하므로 새로 생성된 컬렉션의 요소들은 대문자로 변환이 됩니다.
  3. reject() 는 컬렉션의 요소에 대해 주어진 클로저로 필터링을 하는 메소드입니다. 그러므로 숫자인 요소는 모두 제외되게 됩니다.
  4. reject() 는 empty() 이 참인 요소들을 배제하게 되므로 비어있거나 널인 요소들을 배제하게 됩니다.

독자들도 어떤 결과가 나올지 코드를 보고 예상을 해 봅시다.


이제 위 코드의 결과를 확인해 보기 위해 암시적 컨트롤러(Implicit Controllers) 에서 만든 ImplicitControllergetCollection() 메서드를  추가하고 코드를 붙여 넣은 후에 생성된 컬렉션을 dump()로 출력하도록 구현하고  웹 브라우저로 http://homestead.app/impl/collection 에 연결해 봅시다.

class ImplicitController extends Controller
{
    public function getCollection()
    {
        // 위 코드 추가

        return dump($collection);
    }
CODE

dump() 헬퍼는 var_dump()  와 동일한 역할을 수행하지만 지정된 변수를 보기 좋게 포맷팅해서 출력해주며 dd()dump and die 의 약자로 출력하고 코드 실행을 중지하는 메소드로 디버깅시에 유용하게 사용할 수 있습니다.


결과를 보면 예상처럼 2개의 요소를 가진 컬렉션이 생성된 것을 알 수 있으며 최초의 collect() 메소드로 생성된 컬렉션은 6개이지만 reject() 로 필터링하여 키 값이 1과 3인 것을 알 수 있습니다.

이처럼 라라벨은 배열을 컬렉션을 통해 손 쉽게 다룰수 있으며 일관성있게 모든 배열 데이타는 key/value 쌍으로 다루고 있습니다.