기술.이산이다
array_diff_uassoc
이산이다
2025. 12. 7. 04:16
✅ 1. PHP array_diff_uassoc 함수 설명
array_diff_uassoc 함수는 두 배열을 비교할 때 키(key)를 사용자 정의 비교 함수로 비교하여,
첫 번째 배열에서 차이값만 반환하는 함수입니다.
- 값(value)은 일반 비교로 비교
- 키(key)는 사용자 정의 함수를 통해 비교
- 반환값은 첫 번째 배열에만 존재하는 요소들
✅ 2. PHP 샘플 코드 (array_diff_uassoc)
<?php function keyCompare($a, $b) { if ($a === $b) return 0; return ($a > $b) ? 1 : -1; } $array1 = ["a" => "Apple", "b" => "Banana", "c" => "Cherry"]; $array2 = ["a" => "Apple", "b" => "Blueberry", "d" => "Durian"]; $result = array_diff_uassoc($array1, $array2, "keyCompare"); print_r($result); ?>
<?php
function keyCompare($a, $b) {
if ($a === $b) return 0;
return ($a > $b) ? 1 : -1;
}
$array1 = ["a" => "Apple", "b" => "Banana", "c" => "Cherry"];
$array2 = ["a" => "Apple", "b" => "Blueberry", "d" => "Durian"];
$result = array_diff_uassoc($array1, $array2, "keyCompare");
print_r($result);
?>
✅ 3. 샘플 코드 이용 방법 및 Output
✔ 사용 방법
- array_diff_uassoc($array1, $array2, "비교함수")
- $array1 기준으로 $array2에 같은 키가 없는 요소만 반환함.
- 키 비교 시 keyCompare() 함수가 동작.
✔ 예상 출력 결과
Array ( [c] => Cherry )
이유:
- "a" 키는 두 배열 모두 있으므로 제외
- "b" 키는 두 배열 모두 있으므로 제외 (값은 다르지만 값 비교는 diff 기준 아님)
- "c" 키는 $array2에 없으므로 결과에 포함됨
🔵 4. VB.NET 유사 기능 구현 (Except + 사용자 정의 키 비교 구현)
VB.NET에는 PHP의 array_diff_uassoc와 동일한 기능은 없지만,
Dictionary 비교 + 사용자 정의 키 비교 로직으로 유사하게 구현할 수 있습니다.
✔ VB.NET 함수 설명
두 Dictionary를 비교하여,
첫 번째 Dictionary에만 존재하는 Key-Value 쌍을 반환하는 사용자 정의 함수.
✔ VB.NET 샘플 코드
Function ArrayDiffUAssoc(dict1 As Dictionary(Of String, String),
dict2 As Dictionary(Of String, String),
keyCompare As Func(Of String, String, Integer)) As Dictionary(Of String, String)
Dim result As New Dictionary(Of String, String)
For Each kv In dict1
Dim found As Boolean = False
For Each kv2 In dict2
If keyCompare(kv.Key, kv2.Key) = 0 Then
found = True
Exit For
End If
Next
If Not found Then
result.Add(kv.Key, kv.Value)
End If
Next
Return result
End Function
Function KeyCompare(a As String, b As String) As Integer
Return String.Compare(a, b)
End Function
Sub Main()
Dim d1 = New Dictionary(Of String, String) From {
{"a", "Apple"}, {"b", "Banana"}, {"c", "Cherry"}
}
Dim d2 = New Dictionary(Of String, String) From {
{"a", "Apple"}, {"b", "Blueberry"}, {"d", "Durian"}
}
Dim result = ArrayDiffUAssoc(d1, d2, AddressOf KeyCompare)
For Each kv In result
Console.WriteLine($"{kv.Key} => {kv.Value}")
Next
End Sub
✔ VB.NET 출력 결과
c => Cherry
🟢 5. C# 유사 기능 구현
✔ C# 함수 설명
PHP 함수와 동일하게,
첫 번째 Dictionary에서 두 번째 Dictionary의 키와 일치하지 않는 요소만 반환.
✔ C# 샘플 코드
using System;
using System.Collections.Generic;
class Program
{
static int KeyCompare(string a, string b)
{
return string.Compare(a, b);
}
static Dictionary<string, string> ArrayDiffUAssoc(
Dictionary<string, string> dict1,
Dictionary<string, string> dict2,
Func<string, string, int> comparer)
{
var result = new Dictionary<string, string>();
foreach (var kv in dict1)
{
bool found = false;
foreach (var kv2 in dict2)
{
if (comparer(kv.Key, kv2.Key) == 0)
{
found = true;
break;
}
}
if (!found)
result.Add(kv.Key, kv.Value);
}
return result;
}
static void Main()
{
var d1 = new Dictionary<string, string> {
{"a", "Apple"}, {"b", "Banana"}, {"c", "Cherry"}
};
var d2 = new Dictionary<string, string> {
{"a", "Apple"}, {"b", "Blueberry"}, {"d", "Durian"}
};
var result = ArrayDiffUAssoc(d1, d2, KeyCompare);
foreach (var kv in result)
Console.WriteLine($"{kv.Key} => {kv.Value}");
}
}
✔ C# 출력 결과
c => Cherry
🟠 6. Python 유사 기능 (dict 비교 + custom key comparator)
Python에는 PHP와 동일한 함수는 없으나,
사용자 정의 비교 함수를 사용하여 키 비교 기반 dict 차집합 구현이 가능함.
✔ Python 함수 설명
첫 번째 dict 기준으로,
두 번째 dict에 사용자 정의 키 비교로 일치하는 키가 없으면 결과에 포함.
✔ Python 샘플 코드
def key_compare(a, b):
return (a > b) - (a < b)
def array_diff_uassoc(dict1, dict2, comparer):
result = {}
for k, v in dict1.items():
found = False
for k2 in dict2.keys():
if comparer(k, k2) == 0:
found = True
break
if not found:
result[k] = v
return result
d1 = {"a": "Apple", "b": "Banana", "c": "Cherry"}
d2 = {"a": "Apple", "b": "Blueberry", "d": "Durian"}
result = array_diff_uassoc(d1, d2, key_compare)
print(result)
✔ Python 출력 결과
{'c': 'Cherry'}
🟡 7. JavaScript 유사 기능 구현
JavaScript에는 PHP처럼 배열 키 기반 비교는 없지만,
객체(Object) 또는 Map을 이용하여 동일 기능 구현 가능.
✔ JavaScript 함수 설명
커스텀 키 비교 함수를 사용하여,
첫 번째 객체에만 존재하는 키를 반환.
✔ JavaScript 샘플 코드
function keyCompare(a, b) {
if (a === b) return 0;
return a > b ? 1 : -1;
}
function arrayDiffUAssoc(obj1, obj2, comparer) {
const result = {};
for (const key1 in obj1) {
let found = false;
for (const key2 in obj2) {
if (comparer(key1, key2) === 0) {
found = true;
break;
}
}
if (!found) {
result[key1] = obj1[key1];
}
}
return result;
}
const o1 = { a: "Apple", b: "Banana", c: "Cherry" };
const o2 = { a: "Apple", b: "Blueberry", d: "Durian" };
console.log(arrayDiffUAssoc(o1, o2, keyCompare));
✔ JavaScript 출력 결과
{ c: 'Cherry' }
🎉 전체 요약
| PHP | 원본 함수 제공 | array_diff_uassoc |
| VB.NET | 없음 → 직접 구현 | Dictionary 비교 + 커스텀 키 비교 |
| C# | 없음 → 직접 구현 | Dictionary 비교 + 커스텀 키 비교 |
| Python | 없음 → 직접 구현 | dict 비교 + 사용자 정의 comparator |
| JavaScript | 없음 → 직접 구현 | Object 비교 + key comparator |