✅ 1. PHP array_diff_ukey 함수 설명
array_diff_ukey() 함수는 사용자 정의 콜백 함수로 키 값을 비교하여 배열의 차집합을 구합니다.
즉, **비교 기준이 키(key)**이며, 키 비교 시 사용자가 정의한 비교 함수를 사용합니다.
✔ 동작 방식
array1의 각 키가 다른 배열(array2, array3, …)에는 존재하지 않을 때, 해당 요소를 결과 배열에 포함합니다.
✔ 함수 시그니처
array array_diff_ukey(array $array1, array $array2, callable $key_compare_func, array ...$arrays)
✔ 특징
- 비교는 값(value)이 아니라 키(key) 로 수행된다.
- 키 비교는 콜백 함수를 사용한다.
- 콜백 함수는 strcmp 형태처럼 음수 / 0 / 양수를 반환해야 한다.
✅ 2. PHP array_diff_ukey 샘플 코드
<?php
function compareKeys($a, $b) {
return strcmp($a, $b);
}
$array1 = [
"apple" => 1,
"banana" => 2,
"cherry" => 3
];
$array2 = [
"banana" => 8,
"date" => 9
];
$result = array_diff_ukey($array1, $array2, "compareKeys");
print_r($result);
?>
✅ 3. 샘플 코드 설명 및 출력 결과
✔ 동작 설명
- array1의 키들: apple, banana, cherry
- array2의 키들: banana, date
- banana는 양쪽 배열 모두에 존재하므로 제외됨
- 남는 키: apple, cherry
✔ 출력 결과
Array ( [apple] => 1 [cherry] => 3 )
✅ 4. VB.NET 유사 기능 구현 (Except + Custom Comparer)
VB.NET에는 PHP의 array_diff_ukey와 동일한 내장 함수는 없습니다.
→ 대신 Dictionary의 키를 비교하여 차집합을 구하는 기능을 직접 구현해야 합니다.
✔ VB.NET 함수 설명 (유사 기능)
- 두 개의 Dictionary를 받아 키를 비교하여 첫 번째 Dictionary에서만 존재하는 요소들을 반환.
- 키 비교 방식은 사용자 정의 Comparer로 설정 가능.
✔ VB.NET 샘플 코드
Imports System.Collections.Generic
Module Module1
Class KeyComparer
Implements IEqualityComparer(Of String)
Public Function Equals(x As String, y As String) As Boolean Implements IEqualityComparer(Of String).Equals
Return x.ToLower() = y.ToLower()
End Function
Public Function GetHashCode(obj As String) As Integer Implements IEqualityComparer(Of String).GetHashCode
Return obj.ToLower().GetHashCode()
End Function
End Class
Sub Main()
Dim dict1 As New Dictionary(Of String, Integer) From {
{"apple", 1},
{"banana", 2},
{"cherry", 3}
}
Dim dict2 As New Dictionary(Of String, Integer) From {
{"banana", 8},
{"date", 9}
}
Dim comparer As New KeyComparer()
Dim result = dict1.Where(Function(kv) Not dict2.Keys.Contains(kv.Key, comparer)).ToDictionary(Function(kv) kv.Key, Function(kv) kv.Value)
For Each item In result
Console.WriteLine($"{item.Key} = {item.Value}")
Next
End Sub
End Module
✔ VB.NET output
apple = 1 cherry = 3
✅ 5. C# 유사 기능 구현
C# 역시 array_diff_ukey와 동일한 내장 함수는 없으므로
→ Dictionary + Custom Comparer 방식으로 구현합니다.
✔ C# 함수 설명
- Dictionary를 비교하여 첫 번째 Dictionary에만 존재하는 키를 반환.
✔ C# 샘플 코드
using System;
using System.Collections.Generic;
using System.Linq;
class KeyComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.Equals(y, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(string obj)
{
return obj.ToLower().GetHashCode();
}
}
class Program
{
static void Main()
{
var dict1 = new Dictionary<string, int>
{
{ "apple", 1 },
{ "banana", 2 },
{ "cherry", 3 }
};
var dict2 = new Dictionary<string, int>
{
{ "banana", 8 },
{ "date", 9 }
};
var comparer = new KeyComparer();
var result = dict1
.Where(kv => !dict2.Keys.Contains(kv.Key, comparer))
.ToDictionary(kv => kv.Key, kv => kv.Value);
foreach (var item in result)
{
Console.WriteLine($"{item.Key} = {item.Value}");
}
}
}
✔ C# 출력 결과
apple = 1 cherry = 3
✅ 6. Python 유사 기능 구현 (set + 키 비교)
Python에는 PHP의 array_diff_ukey와 비슷한 내장 함수는 없습니다.
→ 하지만 dict의 키를 비교하기 쉽기 때문에 동일 동작을 구현할 수 있습니다.
✔ Python 함수 설명
- 첫 dict의 키 중 다른 dict에 없는 키만 추출
✔ Python 샘플 코드
dict1 = {
"apple": 1,
"banana": 2,
"cherry": 3
}
dict2 = {
"banana": 8,
"date": 9
}
result = {k: v for k, v in dict1.items() if k not in dict2.keys()}
print(result)
✔ Python 출력 결과
{'apple': 1, 'cherry': 3}
✅ 7. JavaScript 유사 기능 구현
JavaScript에서는 Object 대신 Map을 사용하면 PHP 배열과 가장 유사하게 동작합니다.
✔ JavaScript 함수 설명
- 두 Map 객체의 키를 비교하여 첫 번째 Map에서만 존재하는 항목 반환.
✔ JavaScript 샘플 코드
const map1 = new Map([
["apple", 1],
["banana", 2],
["cherry", 3]
]);
const map2 = new Map([
["banana", 8],
["date", 9]
]);
const result = new Map(
[...map1].filter(([key]) => !map2.has(key))
);
console.log(result);
✔ JavaScript 출력 결과
Map(2) { 'apple' => 1, 'cherry' => 3 }
'개발.이산이다' 카테고리의 다른 글
| array_fill (0) | 2025.12.11 |
|---|---|
| array_chunk (0) | 2025.12.10 |
| date_diff (0) | 2025.12.10 |
| GMT+9 기준으로 현재 날짜 구하기 (0) | 2025.09.28 |
| 내서버에 웹셀( WebShell )이 있다? - 탐지방법 (0) | 2025.09.28 |