array_map()
함수
배열을 처리해서 새로운 배열로 반환하기 위한 함수입니다.
array_map()
함수에 전달되는 콜백 함수는 "각 요소를 변환하여 새로운 배열로 매핑(mapping)하는 역할을 한다"라고 말합니다. 이렇게 매핑된 결과를 새로운 배열로 반환하기 때문에 이 함수의 이름이 "map"으로 정해졌습니다.
array_map()
함수는 foreach()
반복문과 함께 PHP에서 배열을 순회하는 방법 중 가장 널리 사용되는 방법입니다.
array_map()
함수의 간단한 예제
array_map()
함수는
배열을 순회하며 지정된 콜백 함수를 적용하여 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행합니다.
간단한 예제를 통해 설명해보겠습니다.
다음은 숫자 배열을 받아 각 숫자를 두 배로 만들어 새로운 배열을 생성하는 array_map()
함수의 사용 예입니다.
$numbers = [1, 2, 3, 4, 5];
// 각 요소를 두 배로 만들기 위한 콜백 함수 정의
function double($number) {
return $number * 2;
}
// array_map() 함수를 사용하여 각 요소에 콜백 함수를 적용하여 새로운 배열 생성
$doubledNumbers = array_map('double', $numbers);
print_r($doubledNumbers);
// 출력: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
이 예제에서는 $numbers
배열의 각 요소를 두 배로 만들기 위한 double()
라는 콜백 함수를 정의하고, array_map()
함수를 사용하여 이 함수를 $numbers
배열의 각 요소에 적용하여 $doubledNumbers
배열을 생성합니다. 결과적으로 $doubledNumbers
배열에는 각 요소가 두 배로 된 값이 포함되어 있습니다.
array_map()
함수의 구문
array_map(callable $callback , array $array1 [, array $... ]): array
구조와 매개변수
$callback
: 각 배열 요소에 적용할 함수 또는 메서드. 이 함수는 배열의 각 요소에 적용되며 요소를 변환하거나 가공하는 역할을 합니다. 콜백 함수는 배열의 요소 하나를 인수로 받고, 변환된 결과를 반환해야 합니다.$array_1
:$callback
에 적용할 첫 번째 배열입니다.$...
:$callback
에 적용할 ... 번째 배열입니다. 배열의 개수에 따라 추가적인 배열을 지정할 수 있습니다.
반환 값
콜백 함수를 주어진 배열 (또는 여러 배열)의 각 값에 적용하고, 결과를 포함하는 새로운 배열을 반환합니다. 이 새로운 배열은 콜백 함수가 적용된 배열의 키를 보존합니다. 그러나 한 가지 주의할 점은 다음과 같습니다.
- 하나의 배열만 콜백 함수에 전달한 경우: 반환된 배열은 원래 배열과 동일한 키를 가집니다.
- 여러 배열을 콜백 함수에 전달한 경우: 반환된 배열은 연속적인 정수 키를 가집니다.
- 콜백 함수에 전달한 배열이 참조 변수일 경우: PHP 8.0.0 버전부터는 E_WARNING 경고를 발생합니다.
하나의 배열만 콜백 함수에 전달한 경우
$numbers = [1, 2, 3, 4, 5];
// 각 요소를 두 배로 만들기 위한 콜백 함수 정의
function double($number) {
return $number * 2;
}
// array_map() 함수를 사용하여 하나의 배열에만 콜백 함수를 적용
$doubledNumbers = array_map('double', $numbers);
print_r($doubledNumbers);
/* 출력:
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
*/
위 예제에서는 $numbers
배열에만 콜백 함수 double
을 적용합니다. array_map()
함수가 한 배열에만 적용되었으므로 반환된 배열은 원래 배열과 동일한 키를 가집니다. 출력은 각 요소가 두 배로 된 값과 함께 원래 키를 가지게 됩니다.
여러 배열을 콜백 함수에 전달한 경우
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
// 두 개의 배열을 콜백 함수에 전달하여 값을 합치는 예제
function addArrays($a, $b) {
return $a + $b;
}
$result = array_map('addArrays', $array1, $array2);
print_r($result);
/* 출력:
Array
(
[0] => 5
[1] => 7
[2] => 9
)
*/
위 예제에서는 $array1
과 $array2
두 개의 배열을 addArrays
라는 콜백 함수에 전달하고, 이 함수는 두 배열의 값을 더하여 반환합니다. 그러나 $result
배열의 키는 연속적인 정수로 구성됩니다.
$array1 = [1, 2, 3];
$array2 = [4, 5];
// 두 개의 배열을 콜백 함수에 전달하여 값을 합치는 예제
function addArrays($a, $b) {
return $a + $b;
}
$result = array_map('addArrays', $array1, $array2);
print_r($result);
/* 출력:
Array
(
[0] => 5
[1] => 7
[2] => 3
)
*/
위 예제에서는 $array1
과 $array2
두 개의 배열을 addArrays
콜백 함수에 전달합니다. $array1
은 3개의 요소를 가지고 있고, $array2
는 2개의 요소를 가지고 있습니다. array_map()
함수는 가장 긴 배열의 길이를 기준으로 콜백 함수를 적용하며, 반환된 배열의 길이도 가장 긴 배열의 길이와 같게 됩니다.
즉, 여러 배열을 array_map()
함수에 전달하고 배열의 길이가 다를 경우, 반환된 배열의 길이는 가장 긴 입력 배열의 길이와 동일하며, 연속적인 정수 키가 할당됩니다. 이렇게 더 긴 배열에 존재하지 않는 요소는 null
로 채워집니다.
콜백 함수에 전달한 배열이 참조 변수일 경우
$array = [1, 2, 3];
// 콜백 함수는 참조로 전달되어야 하지만 참조로 전달하지 않음
function addOne(&$value) {
$value += 1;
}
array_map('addOne', $array);
array_map()
함수의 다양한 활용 사례
array_map()
함수를 사용하여 배열의 각 요소를 매핑하여 새로운 배열을 반환하는 세 가지 유용한 사례를 소개해드리겠습니다
소문자 변환
문자열 배열에서 각 문자열을 소문자로 변환하여 새로운 배열을 생성하는 경우 array_map()
함수를 사용할 수 있습니다.
$words = ["Hello", "World", "PHP", "ARRAY"];
// 각 문자열 요소를 소문자로 변환하는 콜백 함수 정의
function toLowerCase($word) {
return strtolower($word);
}
// array_map() 함수를 사용하여 각 문자열 요소에 콜백 함수를 적용하여 새로운 배열 생성
$lowercaseWords = array_map('toLowerCase', $words);
print_r($lowercaseWords);
// 출력: Array ( [0] => hello [1] => world [2] => php [3] => array )
위 코드에서 toLowerCase
라는 콜백 함수를 정의하고, 이 함수를 array_map()
함수에 적용하여 $words
배열의 각 문자열 요소를 소문자로 변환합니다. 결과적으로 $lowercaseWords
배열에는 모든 문자열 요소가 소문자로 변환된 값이 됩니다.
다중 배열 조작
여러 배열을 동시에 조작하고 결합하는 경우. 예를 들어, 여러 배열의 값들을 합치거나, 연결하여 새로운 데이터 구조를 만들 때 사용할 수 있습니다.
$names = ['John', 'Jane', 'Bob'];
$scores = [85, 92, 78];
// 이름과 점수를 연결하여 연관 배열 생성
$students = array_map(function($name, $score) {
return ['name' => $name, 'score' => $score];
}, $names, $scores);
print_r($students);
// 출력:
// Array ( [0] => Array ( [name] => John [score] => 85 )
// [1] => Array ( [name] => Jane [score] => 92 )
// [2] => Array ( [name] => Bob [score] => 78 ) )
객체 배열 변환
객체 배열에서 특정 속성을 추출하거나 객체의 메서드를 호출하여 배열을 변환하는 경우. 예를 들어, 사용자 객체 배열에서 이름만 추출하거나, 각 사용자의 특정 메서드를 호출하여 새로운 데이터를 생성할 때 사용할 수 있습니다.
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function getGreeting() {
return "Hello, my name is " . $this->name;
}
}
$users = [new User('Alice'), new User('Bob'), new User('Charlie')];
// 각 사용자의 인사말을 추출
$greetings = array_map(function($user) {
return $user->getGreeting();
}, $users);
print_r($greetings);
// 출력:
// Array ( [0] => Hello, my name is Alice
// [1] => Hello, my name is Bob
// [2] => Hello, my name is Charlie )
array_map()
함수는 배열 조작과 변환을 위한 강력한 도구로 사용될 수 있으며, 다양한 상황에서 유용하게 적용할 수 있습니다.