Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 중복 값을 다차원 배열로 병합하는 방법

PHP 개발을 하다 보면 나이, 이름, 취미처럼 여러 속성을 가진 데이터 배열에서 특정 키 값을 기준으로 항목들을 그룹화해야 하는 경우가 자주 발생합니다. 이 글에서는 foreach 반복문을 활용해 중복된 값을 하나의 다차원 배열로 병합하는 방법을 예제와 함께 살펴보겠습니다.

예제 코드

<?php
$my_arr = array(
    array('Age'=>23, 'name'=>'Joe', 'hobby'=>'Cycling'),
    array('Age'=>26, 'name'=>'Hannah', 'hobby'=>'Rowing'),
    array('Age'=>30, 'name'=>'Dev', 'hobby'=>'Cycling'),
    array('Age'=>30, 'name'=>'Dev', 'hobby'=>'Cycling')
);
foreach($my_arr as $entry => $vals)
{
    $new_vals[$vals['hobby']][]=$vals;
}
echo "The unique array elements are ";
print_r($new_vals);
?>

실행 결과

The unique array elements are Array
(
    [Cycling] => Array
    (
        [0] => Array
        (
            [Age] => 23
            [name] => Joe
            [hobby] => Cycling
        )

        [1] => Array
        (
            [Age] => 30
            [name] => Dev
            [hobby] => Cycling
        )

        [2] => Array
        (
            [Age] => 30
            [name] => Dev
            [hobby] => Cycling
        )

    )

    [Rowing] => Array
    (
        [0] => Array
        (
            [Age] => 26
            [name] => Hannah
            [hobby] => Rowing
        )

    )

)

코드 설명

먼저 나이(Age), 이름(name), 취미(hobby) 정보를 담은 2차원 배열 $my_arr를 정의합니다. 이 배열에는 취미가 'Cycling'인 항목과 'Rowing'인 항목이 섞여 있으며, 내용이 완전히 동일한 중복 항목도 포함되어 있습니다.

다음으로 foreach 반복문을 사용해 배열의 각 요소를 순회하면서, 각 요소의 'hobby' 값을 새로운 배열 $new_vals의 키(key)로 지정하고 해당 요소를 그 키 아래에追加합니다. 이렇게 하면 같은 취미를 가진 항목들이 자동으로 하나의 그룹으로 묶이게 됩니다.

그 결과, 기존에 흩어져 있던 중복 값들이 취미별로 정리된 다차원 구조로 병합되어 데이터를 훨씬 직관적으로 관리할 수 있게 됩니다. 출력 결과를 보면 'Cycling' 그룹에는 Joe와 Dev의 데이터가, 'Rowing' 그룹에는 Hannah의 데이터가 각각 배치된 것을 확인할 수 있습니다.

참고 사항

위 방식은 특정 키를 기준으로 항목을 그룹화하는 데 유용하지만, 완전히 동일한 중복 항목까지 제거하지는 않습니다. 위 예제에서 Dev의 데이터는 'Cycling' 그룹 안에 두 번 포함되어 있는데, 이러한 중복까지 제거하고 싶다면 그룹화 과정에서 in_array() 등으로 이미 존재하는 항목인지 검사하거나, 결과 배열에 array_unique() 계열의 처리를 추가로 적용하면 됩니다.