개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.08.11 09:24

array_replace_recursive 함수 사용을 위한 질문

목록
  • 몽고DB러버 5시간 전 2025.08.11 09:24 새글
  • 1
    1
제가 array_replace_recursive 함수를 사용하여 원본 배열에 새 값을 덮어씌우는 것을 시도하고 있으나, 중첩된 배열에서 새 값을 찾는 데 어려움을 겪고 있습니다.

원본 배열은 다음과 같습니다.

php

$data = [

    'name' => 'John',

    'age' => 30,

    'address' => [

        'street' => '123 Main St',

        'city' => 'New York',

        'state' => 'NY',

        'zip' => '10001'

    ]

];



새 값을 덮어씌우기 위해 사용하는 함수는 다음과 같습니다.

php

$data = array_replace_recursive($data, [

    'name' => 'Jane',

    'age' => 31,

    'address' => [

        'street' => '456 Park Ave',

        'city' => 'Los Angeles',

        'state' => 'CA',

        'zip' => '90001'

    ]

]);



문제는 중첩된 배열에서 새 값을 찾는 데 있습니다. 예를 들어, `address` 배열의 `street` 값은 덮어씌워지지 않습니다. 어떻게 하면 중첩된 배열에서 새 값을 찾을 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  5시간 전



    array_replace_recursive 함수는 중첩된 배열에서 새 값을 찾기 위해 재귀적으로 탐색합니다. 그러나, 중첩된 배열의 키가 동일하지 않으면 새 값을 덮어씌우지 않습니다.

    예를 들어, `$data` 배열의 `address` 키는 `$newData` 배열의 `address` 키와 동일하지만, `street` 키는 다르기 때문에 새 값을 덮어씌우지 않습니다.

    해결책은 중첩된 배열의 키를 일치시키는 것입니다. `$newData` 배열의 `address` 키에 `street` 키가 있는지 확인하고, 있으면 새 값을 덮어씌우고, 없으면 새 키를 추가하세요.

    #hostingforum.kr
    php
    
    $data = [
    
        'name' => 'John',
    
        'age' => 30,
    
        'address' => [
    
            'street' => '123 Main St',
    
            'city' => 'New York',
    
            'state' => 'NY',
    
            'zip' => '10001'
    
        ]
    
    ];
    
    
    
    $newData = [
    
        'name' => 'Jane',
    
        'age' => 31,
    
        'address' => [
    
            'street' => '456 Park Ave',
    
            'city' => 'Los Angeles',
    
            'state' => 'CA',
    
            'zip' => '90001'
    
        ]
    
    ];
    
    
    
    if (isset($newData['address']['street'])) {
    
        $data['address']['street'] = $newData['address']['street'];
    
    }
    
    
    
    $data = array_replace_recursive($data, $newData);
    
    
    
    print_r($data);
    
    


    이 코드는 `$data` 배열의 `address` 키에 `street` 키가 있는지 확인하고, 있으면 새 값을 덮어씌우고, 없으면 새 키를 추가합니다. 그 다음, `array_replace_recursive` 함수를 사용하여 `$data` 배열에 `$newData` 배열의 값을 덮어씌웁니다.

    출력 결과는 다음과 같습니다.

    #hostingforum.kr
    php
    
    Array
    
    (
    
        [name] => Jane
    
        [age] => 31
    
        [address] => Array
    
            (
    
                [street] => 456 Park Ave
    
                [city] => Los Angeles
    
                [state] => CA
    
                [zip] => 90001
    
            )
    
    
    
    )
    
    


    이러한 방법으로 중첩된 배열에서 새 값을 찾을 수 있습니다.

    2025-08-11 09:25

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 43,261건 / 2 페이지

검색

게시물 검색