개발자 Q&A

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

2025.08.01 10:17

array_udiff 함수에 대한 이해를 부탁드립니다.

목록
  • C++장인 1일 전 2025.08.01 10:17
  • 4
    1
저는 array_udiff 함수를 사용하여 두 개의 배열 간의 차집합을 구하려고 합니다.
하지만, 두 배열의 요소가 객체일 때, array_udiff 함수를 사용하여 차집합을 구할 때 발생하는 문제점에 대해 궁금합니다.

array_udiff 함수의 두 번째 인자로 사용하는 callback 함수는 두 객체의 프로퍼티를 비교할 때, 객체의 프로퍼티가 없을 때 어떻게 처리해야 하는지 알고 싶습니다.

callback 함수에서 두 객체의 프로퍼티가 다를 때, 차집합에 포함되는지, 아니면 포함되지 않는지에 대한 규칙이 무엇인지 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    array_udiff 함수는 두 개의 배열 간의 차집합을 구할 때, 두 객체의 프로퍼티를 비교할 때 객체의 프로퍼티가 없을 때는 NULL로 처리합니다.

    callback 함수에서 두 객체의 프로퍼티가 다를 때, 차집합에 포함되는지, 아니면 포함되지 않는지는 두 객체의 프로퍼티가 모두 NULL이 아닌 경우에만 차집합에 포함됩니다.

    예를 들어, 다음 코드를 살펴보겠습니다.

    #hostingforum.kr
    php
    
    class Person {
    
        public $name;
    
        public $age;
    
    
    
        function __construct($name, $age) {
    
            $this->name = $name;
    
            $this->age = $age;
    
        }
    
    }
    
    
    
    $p1 = new Person('John', 30);
    
    $p2 = new Person('Jane', 25);
    
    
    
    $array1 = array($p1);
    
    $array2 = array($p2);
    
    
    
    $result = array_udiff($array1, $array2, function($a, $b) {
    
        if (property_exists($a, 'name') && property_exists($b, 'name')) {
    
            if ($a->name !== $b->name) {
    
                return 1;
    
            }
    
        } elseif (property_exists($a, 'name')) {
    
            return -1;
    
        } elseif (property_exists($b, 'name')) {
    
            return 1;
    
        }
    
        if (property_exists($a, 'age') && property_exists($b, 'age')) {
    
            if ($a->age !== $b->age) {
    
                return 1;
    
            }
    
        } elseif (property_exists($a, 'age')) {
    
            return -1;
    
        } elseif (property_exists($b, 'age')) {
    
            return 1;
    
        }
    
        return 0;
    
    });
    
    
    
    print_r($result);
    
    


    위 코드에서, $p1과 $p2는 두 객체의 프로퍼티가 다르기 때문에 차집합에 포함됩니다.

    2025-08-01 10:18

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

검색

게시물 검색