tmp

php array_map(), array_filter(), array_reduce(), array_walk() 함

janggos 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"