
array_uintersect_uassoc 함수는 두 개의 배열을 비교하고, 동일한 키를 가진 항목을 찾을 때 정렬을 수행합니다. 그러나, 이 함수는 항목을 정렬하기 전에 항목을 정렬하지 않기 때문에, 정렬이 제대로 되지 않을 수 있습니다.
이 문제를 해결하려면, 두 개의 배열을 비교하기 전에 항목을 정렬해야 합니다. 예를 들어, 다음과 같이 코드를 수정할 수 있습니다.
#hostingforum.kr
php
$array1 = [
['name' => '이름1', 'age' => 20],
['name' => '이름2', 'age' => 30],
['name' => '이름3', 'age' => 10]
];
$array2 = [
['name' => '이름3', 'age' => 10],
['name' => '이름2', 'age' => 30],
['name' => '이름1', 'age' => 20]
];
// 항목을 정렬하기 전에 정렬을 수행합니다.
usort($array1, function($a, $b) {
if ($a['age'] == $b['age']) {
return strcmp($a['name'], $b['name']);
} else {
return $a['age'] - $b['age'];
}
});
usort($array2, function($a, $b) {
if ($a['age'] == $b['age']) {
return strcmp($a['name'], $b['name']);
} else {
return $a['age'] - $b['age'];
}
});
// 정렬된 항목을 비교합니다.
$intersect = array_uintersect_uassoc($array1, $array2, function($a, $b) {
if ($a['age'] == $b['age']) {
return strcmp($a['name'], $b['name']);
} else {
return $a['age'] - $b['age'];
}
}, function($a, $b) {
if ($a['age'] == $b['age']) {
return strcmp($a['name'], $b['name']);
} else {
return $a['age'] - $b['age'];
}
});
print_r($intersect);
이 코드에서는, 두 개의 배열을 비교하기 전에 항목을 정렬하기 위해 usort 함수를 사용합니다. 이렇게 하면, 정렬이 제대로 되고, array_uintersect_uassoc 함수를 사용하여 항목을 비교할 수 있습니다.
2025-03-26 18:05