Laravel/라라벨정보

mapWithKeys() {#collection-method}

Dev갱이 2020. 4. 6. 15:44
728x90

정의 : mapWithKeys 메소드는 컬렉션 전체를 반복하며 각각의 값을 주어진 콜백에 전달합니다 콜백은 하나의 키/값 쌍을 포함하는 연관 배열을 반환합니다.

먼소린지 일딴 이해가 안되는데 밑에 예제 연관 배열을 보자.

$collection =

collect([

[ 'name' => 'John', 'department' => 'Sales', 'email' => 'john@example.com' ],

[ 'name' => 'Jane', 'department' => 'Marketing', 'email' => 'jane@example.com' ]

]);

첫번째 연관배열은 존 녀석의 이름과 직업 이메일

두번째 연관배열은 제인 이름 직업 이메일이다

 

자 그럼 mapWithKeys 메소드의 설명을 다시보자 역시, 다시 봐도 모르겠다.

그럼 밑에 결과 예제를 한번 볼까?

$keyed = $collection->mapWithKeys(function ($item)

{ return [$item['email'] => $item['name']]; });

//$keyed->all();

난 all함수말고 그냥 페이지에서 보게

dump($keyed);로 해본다.

/* [ 'john@example.com' => 'John', 'jane@example.com' => 'Jane', ] */

 

오호 보니까 $collection이라는 배열에 mapWithKeys라는 메소드를 통해서 

다시 email이 name을 가르키는 연관배열로 다시 만들어서 반환(return)하는것 같다.

한번 출력해볼까?

리얼 겁나 섹시하네 라라벨!! 헬퍼함수!!!

 

자 어렴풋이 조금 이해가 됬으니 이제 저것을 가지고 내가 사용하는곳에 접목 시켜보자

 

1.

$genresArray = Http::withToken(config('services.tmdb.token'))
->get('https://api.themoviedb.org/3/genre/movie/list')
->json()['genres'];

 

먼저, api에서 얻어온 데이터의 연관 배열을 살펴보자

 

id값과 name 을 가진 배열이 주루루룩 나온다.

여기서 내가 얻고 싶은 데이터는 나는 

$popularMovies = Http::withToken(config('services.tmdb.token'))
->get('https://api.themoviedb.org/3/movie/popular')
->json()['results'];

이곳에서 id값을 얻었으니 그 id값으로 name을 얻고 싶다.

그렇다면 위에 예제처럼 저기에 있는 id값이 바로 name을 가르키는 연관배열로 반환 시키면 되겠지?

 

바꿔보자

$test = $genresArray->mapWithKeys(function($item){
return [$item['id'] => $item['name']];
});

 

Call to a member function mapWithKeys() on array

이런 오류 발생... 저 멤버함수를 사용할 수 없다네 왤까...? 뭘 잘못한거지

해결) 

위에 예제를 보면 $collection변수에 담겨있는 연관배열이

collect([]) 이렇게 콜렉트 함수에 감싸져 있다!!! 그렇다면 내것도

 

$test = collect($genresArray)->mapWithKeys(function($item){
return [$item['id'] => $item['name']];
});
dump($test);

결과는?

성공! 너무 재밋습니다.

 

예제출처)

https://laravel.kr/docs/7.x/collections#method-mapwithkeys

728x90