-
php array_map(), array_filter(), array_reduce(), array_walk() 함tmp 2024. 10. 26. 15:12
1. array_map() 함수
정의
array_map() 함수는 하나 이상의 배열의 요소를 콜백 함수로 처리하여, 변환된 값을 포함하는 새로운 배열을 생성합니다.
기본 형식
array_map(callable $callback, array $array1, array ...$arrays): array- $callback: 배열의 각 요소를 처리할 때 호출할 함수. 이 함수는 배열의 각 요소에 대해 호출되며, 그 반환값이 새로운 배열에 포함됩니다.
- $array1: 변환할 첫 번째 배열.
- $arrays: 추가로 처리할 배열들. 여러 배열을 함께 처리할 수 있습니다.
반환값
array_map()은 콜백 함수의 처리 결과를 포함하는 새로운 배열을 반환합니다. 원본 배열은 변경되지 않습니다.
예시
1. 단일 배열의 각 요소에 대해 함수 적용
$numbers = [1, 2, 3, 4, 5];
// 각 숫자에 대해 제곱을 계산합니다.
$squares = array_map(function($num) {
return $num * $num;
}, $numbers);
print_r($squares);결과:
[1, 4, 9, 16, 25]이 예제에서는 $numbers 배열의 각 요소에 대해 제곱을 계산하여 새로운 배열 $squares를 반환합니다.
2. 여러 배열을 동시에 처리
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
// 두 배열의 요소를 더합니다.
$sums = array_map(function($a, $b) {
return $a + $b;
}, $array1, $array2);
print_r($sums);결과:
[5, 7, 9]이 예제에서는 $array1과 $array2의 각 요소를 더해서 새로운 배열 $sums를 만듭니다.
두 배열의 첫 번째 요소끼리, 두 번째 요소끼리, 세 번째 요소끼리 각각 더해집니다.
3. 내장 함수 사용
array_map()은 PHP의 내장 함수도 콜백으로 사용할 수 있습니다:
$strings = ['hello', 'world', 'php'];
// 각 문자열을 대문자로 변환합니다.
$uppercased = array_map('strtoupper', $strings);
print_r($uppercased);결과:
['HELLO', 'WORLD', 'PHP']이 예제에서는 strtoupper를 사용해 문자열 배열의 각 요소를 대문자로 변환합니다.
2. array_walk() 함수
정의
array_walk() 함수는 배열의 각 요소에 대해 콜백 함수를 호출합니다.
배열의 값을 변경하거나 추가적인 처리를 할 때 사용할 수 있습니다.
array_map()과 달리, 배열을 직접 수정하며, 반환값은 true 또는 false입니다.
기본 형식
array_walk(array &$array, callable $callback, mixed $userdata = null): bool- $array: 콜백 함수를 적용할 배열. 배열은 참조로 전달됩니다.
- $callback: 배열의 각 요소에 적용할 콜백 함수. 이 함수는 두 개의 인수를 받습니다: 현재 배열 요소의 값과 키.
- $userdata: 추가적으로 콜백 함수에 전달할 사용자 정의 데이터.
예시
- 각 요소에 함수 적용:array_walk()는 배열을 참조로 받아서 직접 수정합니다. 이 예제에서는 배열의 각 요소를 2배로 만듭니다.
$numbers = [1, 2, 3, 4];array_walk($numbers, function(&$item) { $item *= 2; // 각 요소를 2배로 만듦 });print_r($numbers); // 결과: [2, 4, 6, 8]
- 키와 값을 함께 사용:이 예제에서는 각 사람의 이름과 나이를 출력합니다.
$people = ['John' => 25, 'Jane' => 28];array_walk($people, function($age, $name) { echo "$name is $age years old." . PHP_EOL; });
3. array_map()과 array_walk() 비교
- array_map():
- 새로운 배열을 반환합니다.
- 원본 배열을 수정하지 않고, 변환된 결과를 담은 새로운 배열을 생성합니다.
- 다수의 배열을 동시에 처리할 수 있습니다.
- array_walk():
- 배열을 직접 수정합니다.
- 참조로 배열을 받아 요소를 변경할 수 있지만, 새로운 배열을 반환하지 않습니다.
- 단일 배열만 처리할 수 있습니다.
예시 비교
- array_map()은 변환된 결과를 반환하는 반면:
$numbers = [1, 2, 3];
$doubled = array_map(function($num) {
return $num * 2;
}, $numbers);
print_r($doubled); // [2, 4, 6]
- array_walk()는 배열을 직접 수정합니다:
$numbers = [1, 2, 3];
array_walk($numbers, function(&$num) {
$num *= 2;
});
print_r($numbers); // [2, 4, 6]
4. array_filter()
정의
array_filter() 함수는 배열의 요소를 필터링하는 데 사용됩니다.
주어진 콜백 함수에 따라 배열의 각 요소를 검사하고, 조건에 맞는 요소만을 포함하는 새로운 배열을 반환합니다.
기본 형식
array_filter(array $array, callable $callback = null, int $mode = 0): array- $array: 필터링할 배열.
- $callback: 각 요소를 검사하는 콜백 함수. 콜백 함수가 true를 반환하는 요소만 결과 배열에 포함됩니다. 콜백 함수를 생략하면 false로 평가되는 값을 제거합니다.
- $mode: 콜백 함수에 전달할 인수의 형식을 결정하는 플래그 (ARRAY_FILTER_USE_KEY, ARRAY_FILTER_USE_BOTH).
예시
- 콜백 사용:이 예제에서는 배열 $numbers의 각 요소에 대해 콜백 함수를 호출하고, 짝수인 요소만 결과 배열에 포함합니다.
$numbers = [1, 2, 3, 4, 5, 6];
$evenNumbers = array_filter($numbers, function($num) {
return $num % 2 === 0; // 짝수만 필터링
});
print_r($evenNumbers); // 결과: [2, 4, 6] - 콜백 생략:콜백 함수를 생략하면, false로 평가되는 요소(0, 빈 문자열, false, null)가 제거됩니다.
$values = [0, 1, 2, '', false, null, 'hello'];
$filteredValues = array_filter($values);
print_r($filteredValues); // 결과: [1, 2, 'hello']
5. array_reduce()
정의
array_reduce() 함수는 배열의 모든 요소를 하나의 값으로 축소하는 데 사용됩니다.
주어진 콜백 함수를 통해 배열을 누적하여 단일 값으로 반환합니다.
기본 형식
array_reduce(array $array, callable $callback, mixed $initial = null): mixed- $array: 축소할 배열.
- $callback: 배열의 요소를 축소하는 데 사용할 콜백 함수. 이 함수는 두 개의 인수를 받습니다: 누적된 값과 현재 배열 요소.
- $initial: 축소의 초기값. 이 값은 첫 번째 콜백 호출 전에 사용됩니다.
예시
- 합계 계산:여기서 $carry는 이전에 축적된 값이고, $item은 현재 배열의 요소입니다. 각 요소를 누적해 최종 합계를 구합니다.
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, function($carry, $item) {
return $carry + $item;
}, 0);
echo $sum; // 결과: 15 - 문자열 연결:이 예제에서는 배열의 각 문자열을 연결하여 하나의 문장으로 만듭니다.
$words = ['Hello', 'world', 'PHP'];
$sentence = array_reduce($words, function($carry, $word) {
return $carry . ' ' . $word;
});
echo $sentence; // 결과: "Hello world PHP"
'tmp' 카테고리의 다른 글
Top-level navigation (0) 2024.11.23 Origin 헤더에 대하여 (0) 2024.11.21 PHP 8.2 이상에서 클래스의 프로퍼티 동적 설정 제한 (1) 2024.10.24 parse_url() 함수 (1) 2024.10.23 Early binding 과 Late static binding (2) 2024.10.05