
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