티스토리 뷰

반응형

배열에서 특정 키를 기준으로 중복 제거하기

프로그래밍을 하다 보면 배열에서 중복된 데이터를 제거해야 할 때가 자주 있습니다. 특히, PHP에서 배열의 특정 키를 기준으로 고유한 데이터를 추출해야 한다면 어떻게 해야 할까요? 이번 글에서는 length라는 키를 기준으로 중복된 항목을 제거하는 방법을 학생들에게 설명하듯이 자세히 알려드리겠습니다.

 


중복 제거가 필요한 이유

배열의 데이터 중복은 코드 실행의 효율성을 저하시키고, 결과가 의도치 않게 나오는 원인이 됩니다. 예를 들어, 상품의 길이별 데이터를 관리하는 시스템에서 동일한 길이를 가진 데이터가 여러 번 기록되면 혼란을 초래할 수 있습니다. 따라서, 중복된 데이터를 제거하여 관리하기 쉬운 형태로 만드는 것은 매우 중요합니다.


문제 상황 정의

다음과 같은 배열이 있다고 가정해 보겠습니다.

$smoke_rows = [
    ['length' => 3000, 'sum' => 5],
    ['length' => 3000, 'sum' => 10],
    ['length' => 4000, 'sum' => 15],
];

위 배열에서 length 키를 기준으로 중복된 항목을 제거하고, 결과는 다음과 같이 고유한 값만 포함해야 합니다.

[
    ['length' => 3000, 'sum' => 10],
    ['length' => 4000, 'sum' => 15],
]

length가 3000인 데이터가 두 개 있지만, 마지막 값만 유지하도록 해야 합니다.


해결 방법: array_reduce 활용

이 문제를 해결하기 위해 PHP의 array_reduce를 사용할 수 있습니다. array_reduce는 배열을 순회하며 특정 기준에 따라 값을 누적시키는 함수입니다. 여기에 배열의 length를 고유 키로 사용하는 방법을 적용할 수 있습니다.

코드 작성하기

다음은 중복 제거를 위한 완성된 코드입니다.

// 중복 제거
$unique_smoke_rows = array_values(array_reduce($smoke_rows, function ($carry, $item) {
    $carry[$item['length']] = $item; // 'length'를 키로 사용하여 중복 제거
    return $carry;
}, []));

코드의 작동 원리

  1. 배열 축소하기 (array_reduce)
    • array_reduce는 배열의 각 항목을 순회하며 $carry에 누적합니다.
    • $carry의 키로 length 값을 사용합니다. 이렇게 하면 동일한 length를 가진 항목은 마지막으로 입력된 값으로 대체됩니다.
  2. 숫자 키로 배열 재정렬하기 (array_values)
    • 최종적으로 array_values를 사용해 숫자 키로 재정렬된 배열을 반환합니다.

결과 확인하기

이 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

[
    ['length' => 3000, 'sum' => 10],
    ['length' => 4000, 'sum' => 15],
]

length가 3000인 중복 데이터는 제거되었고, 마지막 값만 남게 되었습니다.


결론: 깔끔한 데이터는 성공적인 코드의 출발점입니다

이번 예제를 통해 우리는 데이터를 깔끔하게 정리하는 것이 얼마나 중요한지를 배웠습니다. 코드의 효율성을 높이기 위해 불필요한 중복을 제거하고, 관리하기 쉬운 상태로 만드는 습관은 성공적인 프로그래머로 성장하기 위한 필수 조건입니다.

우리 삶도 마찬가지입니다. 복잡하고 혼란스러운 일들을 잘 정리하고, 중요한 것에 집중하는 자세를 갖춘다면 더 의미 있는 결과를 얻을 수 있습니다. 여러분도 오늘부터 코드뿐만 아니라 삶 속에서도 단순하고 명확하게 살아보는 건 어떨까요? 😊

반응형
댓글