array_map()
함수
array_map()
함수는 각 요소에 지정된 콜백 함수를 적용하여 새로운 배열을 생성하기 위한 함수입니다.
array_map()
함수에 전달되는 콜백 함수는 "각 요소를 변환하여 새로운 배열로 매핑(mapping)하는 역할을 한다"라고 말합니다. 이렇게 매핑된 결과를 새로운 배열로 반환하기 때문에 이 함수의 이름이 "map"으로 정해졌습니다.
매핑(mapping)이란
어떤 값을 다른 값에 대응시키는 과정을 뜻하는 개념이며 수학, 컴퓨터 과학, 지리 정보 시스템 등 다양한 분야해서 사용합니다.
array_map()
함수는 foreach()
반복문과 함께 PHP에서 배열을 순회하는 방법 중 가장 널리 사용되는 방법입니다.
간단한 예제
array_map()
함수는
배열을 순회하며 지정된 콜백 함수를 적용하여 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행합니다.
간단한 예제를 통해 설명해보겠습니다.
다음은 숫자 배열을 받아 각 숫자를 두 배로 만들어 새로운 배열을 생성하는 array_map()
함수의 사용 예입니다.
이 예제에서는 $numbers
배열의 각 요소를 두 배로 만들기 위한 double()
라는 콜백 함수를 정의하고, array_map()
함수를 사용하여 이 함수를 $numbers
배열의 각 요소에 적용하여 $doubledNumbers
배열을 생성합니다. 결과적으로 $doubledNumbers
배열에는 각 요소가 두 배로 된 값이 포함되어 있습니다.
구문
구조와 매개변수
$callback
: 각 배열 요소에 적용할 함수 또는 메서드. 이 함수는 배열의 각 요소에 적용되며 요소를 변환하거나 가공하는 역할을 합니다. 콜백 함수는 배열의 요소 하나를 인수로 받고, 변환된 결과를 반환해야 합니다.$array_1
:$callback
에 적용할 첫 번째 배열입니다.$...
:$callback
에 적용할 ... 번째 배열입니다. 배열의 개수에 따라 추가적인 배열을 지정할 수 있습니다.
반환 값
콜백 함수를 주어진 배열 (또는 여러 배열)의 각 값에 적용하고, 결과를 포함하는 새로운 배열을 반환합니다. 이 새로운 배열은 콜백 함수가 적용된 배열의 키를 보존합니다. 그러나 한 가지 주의할 점은 다음과 같습니다.
- 하나의 배열만 콜백 함수에 전달한 경우: 반환된 배열은 원래 배열과 동일한 키를 가집니다.
- 여러 배열을 콜백 함수에 전달한 경우: 반환된 배열은 연속적인 정수 키를 가집니다.
- 콜백 함수에 전달한 배열이 참조 변수일 경우: PHP 8.0.0 버전부터는 E_WARNING 경고를 발생합니다.
하나의 배열만 콜백 함수에 전달한 경우
위 예제에서는 $numbers
배열에만 콜백 함수 double
을 적용합니다. array_map()
함수가 한 배열에만 적용되었으므로 반환된 배열은 원래 배열과 동일한 키를 가집니다. 출력은 각 요소가 두 배로 된 값과 함께 원래 키를 가지게 됩니다.
여러 배열을 콜백 함수에 전달한 경우
위 예제에서는 $array1
과 $array2
두 개의 배열을 addArrays
라는 콜백 함수에 전달하고, 이 함수는 두 배열의 값을 더하여 반환합니다. 그러나 $result
배열의 키는 연속적인 정수로 구성됩니다.
위 예제에서는 $array1
과 $array2
두 개의 배열을 addArrays
콜백 함수에 전달합니다. $array1
은 3개의 요소를 가지고 있고, $array2
는 2개의 요소를 가지고 있습니다. array_map()
함수는 가장 긴 배열의 길이를 기준으로 콜백 함수를 적용하며, 반환된 배열의 길이도 가장 긴 배열의 길이와 같게 됩니다.
즉, 여러 배열을 array_map()
함수에 전달하고 배열의 길이가 다를 경우, 반환된 배열의 길이는 가장 긴 입력 배열의 길이와 동일하며, 연속적인 정수 키가 할당됩니다. 이렇게 더 긴 배열에 존재하지 않는 요소는 null
로 채워집니다.
콜백 함수에 전달한 배열이 참조 변수일 경우
다양한 활용 사례
array_map()
함수를 사용하여 배열의 각 요소를 매핑하여 새로운 배열을 반환하는 세 가지 유용한 사례를 소개해드리겠습니다
소문자 변환
문자열 배열에서 각 문자열을 소문자로 변환하여 새로운 배열을 생성하는 경우 array_map()
함수를 사용할 수 있습니다.
위 코드에서 toLowerCase
라는 콜백 함수를 정의하고, 이 함수를 array_map()
함수에 적용하여 $words
배열의 각 문자열 요소를 소문자로 변환합니다. 결과적으로 $lowercaseWords
배열에는 모든 문자열 요소가 소문자로 변환된 값이 됩니다.
다중 배열 조작
여러 배열을 동시에 조작하고 결합하는 경우. 예를 들어, 여러 배열의 값들을 합치거나, 연결하여 새로운 데이터 구조를 만들 때 사용할 수 있습니다.
객체 배열 변환
객체 배열에서 특정 속성을 추출하거나 객체의 메서드를 호출하여 배열을 변환하는 경우. 예를 들어, 사용자 객체 배열에서 이름만 추출하거나, 각 사용자의 특정 메서드를 호출하여 새로운 데이터를 생성할 때 사용할 수 있습니다.
array_map()
함수는 배열 조작과 변환을 위한 강력한 도구로 사용될 수 있으며, 다양한 상황에서 유용하게 적용할 수 있습니다.
참고문헌
같이 보기
- PHP foreach() 반복문 사용법 및 활용 예제
- PHP array_filter() 함수 – 개념 정리 및 사용 예제
- PHP array_reduce() 함수 – 개념 정리 및 사용 예제
- PHP array_search() 함수 – 개념 정리 및 사용 예제
- PHP array_keys() 함수 – 배열 키 목록 가져오기
- PHP array_values() 함수 – 배열 값 목록 가져오기
- PHP array_slice() 함수 - 개념 정리 및 사용 예제
- PHP array_diff() 함수 - 다른 배열에 없는 값 찾기
- PHP array_diff_assoc() 함수 - 키를 기준으로 다른 배열에 없는 값 찾기
- PHP array_intersect() 함수 - 다른 배열과의 공통 값 찾기
- PHP array_intersect_assoc() 함수 - 키와 값을 기준으로 다른 배열과의 공통 요소 찾기
- PHP array_reverse() 함수 - 배열 요소 역순 정렬
- 자바스크립트 map() 함수 – 개념 정리 및 사용 예제