✅ 1. PHP array_udiff 함수 설명
array_udiff() 함수는 사용자 정의 비교 함수를 이용하여 배열 간의 차이(diff)를 구하는 함수입니다.
요소 값(value)을 기준으로 비교하며, 비교 로직은 사용자가 제공하는 콜백 함수에서 처리합니다.
✔ 특징
- 키(key)는 비교에 사용하지 않고, 값(value)만 비교함.
- 비교 함수는 두 값을 받아 0, 양수, 음수를 반환해야 함 (strcmp 스타일).
- 첫 번째 배열에서, 다른 배열들과 비교 후 존재하지 않는 값만 반환.
✅ 2. PHP array_udiff 샘플 코드
<?php
function customCompare($a, $b) {
return strcmp($a, $b); // 문자열 비교
}
$array1 = ["Apple", "Banana", "Cherry"];
$array2 = ["Banana", "Dragonfruit"];
$array3 = ["Cherry", "Elderberry"];
$result = array_udiff($array1, $array2, $array3, "customCompare");
print_r($result);
?>
✅ 3. 샘플 코드 설명 및 Output
✔ 동작 설명
- array1에서 array2, array3에 존재하는 값은 제거
- 사용자 정의 비교 함수 customCompare로 문자열 비교 수행
✔ 비교 결과
- "Banana" → array2에 있음 → 제거
- "Cherry" → array3에 있음 → 제거
- "Apple" → 어느 배열에도 없음 → 유지됨
✔ Output
Array ( [0] => Apple )
✅ 4. VB.NET에서 유사 기능 구현 (array_udiff 대체)
VB.NET에는 PHP처럼 배열 차이를 사용자 정의 비교 함수로 처리하는 내장 함수가 없으나,
LINQ와 사용자 정의 Comparer를 이용해 동일한 기능을 구현할 수 있습니다.
✔ 4-1. VB.NET equivalent 설명
- 두 배열을 비교하여 첫 번째 배열에만 존재하는 요소를 반환
- 문자열 비교 또는 사용자 지정 비교 가능
✔ 4-2. VB.NET 샘플 코드
Imports System.Collections.Generic
Module Module1
Class CustomComparer
Implements IEqualityComparer(Of String)
Public Function Equals(x As String, y As String) As Boolean Implements IEqualityComparer(Of String).Equals
Return String.Compare(x, y, StringComparison.Ordinal) = 0
End Function
Public Function GetHashCode(obj As String) As Integer Implements IEqualityComparer(Of String).GetHashCode
Return obj.GetHashCode()
End Function
End Class
Sub Main()
Dim array1 = {"Apple", "Banana", "Cherry"}
Dim array2 = {"Banana", "Dragonfruit"}
Dim array3 = {"Cherry", "Elderberry"}
Dim comparer As New CustomComparer()
Dim diff = array1.Except(array2, comparer).Except(array3, comparer)
For Each item In diff
Console.WriteLine(item)
Next
End Sub
End Module
✔ 4-3. Output
Apple
✅ 5. C#에서 유사 기능 구현 (array_udiff 대체)
C#도 VB.NET과 동일하게 LINQ의 Except()와 사용자 정의 비교자를 사용합니다.
✔ 5-1. 설명
- IEqualityComparer<T> 구현하여 사용자 정의 비교 가능
- 첫 번째 배열에서 나머지 배열에 없는 값을 반환
✔ 5-2. C# 샘플 코드
using System;
using System.Linq;
using System.Collections.Generic;
class CustomComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return string.Compare(x, y, StringComparison.Ordinal) == 0;
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
class Program
{
static void Main()
{
string[] array1 = { "Apple", "Banana", "Cherry" };
string[] array2 = { "Banana", "Dragonfruit" };
string[] array3 = { "Cherry", "Elderberry" };
var comparer = new CustomComparer();
var result = array1.Except(array2, comparer).Except(array3, comparer);
foreach (var item in result)
Console.WriteLine(item);
}
}
✔ 5-3. Output
Apple
✅ 6. Python에서 유사 기능 구현
Python은 set을 사용하면 유사한 기능을 구현할 수 있지만, 사용자 정의 비교 함수는 set에서 직접 지원하지 않음.
그래서 사용자 정의 비교가 필요하면 수동 필터링 방식으로 구현합니다.
✔ 6-1. 설명
- 두 리스트의 차이를 구함
- 문자열 비교 또는 사용자 정의 비교 적용 가능
✔ 6-2. Python 샘플 코드
def custom_compare(a, b):
return a == b
def array_udiff_py(array1, *others):
result = []
for item in array1:
exists = False
for arr in others:
if any(custom_compare(item, x) for x in arr):
exists = True
break
if not exists:
result.append(item)
return result
array1 = ["Apple", "Banana", "Cherry"]
array2 = ["Banana", "Dragonfruit"]
array3 = ["Cherry", "Elderberry"]
print(array_udiff_py(array1, array2, array3))
✔ 6-3. Output
['Apple']
✅ 7. JavaScript에서 유사 기능 구현
JavaScript도 사용자 정의 비교 함수를 이용해 diff 기능을 직접 구현해야 합니다.
✔ 7-1. 설명
- 배열 요소 비교시 콜백을 사용하여 커스텀 비교 가능
- 첫 번째 배열에서 나머지 배열에 없는 요소만 반환
✔ 7-2. JavaScript 샘플 코드
function customCompare(a, b) {
return a === b;
}
function array_udiff_js(array1, ...others) {
return array1.filter(item => {
return !others.some(arr =>
arr.some(x => customCompare(item, x))
);
});
}
const array1 = ["Apple", "Banana", "Cherry"];
const array2 = ["Banana", "Dragonfruit"];
const array3 = ["Cherry", "Elderberry"];
console.log(array_udiff_js(array1, array2, array3));
✔ 7-3. Output
["Apple"]
'개발.이산이다' 카테고리의 다른 글
| array_intersect_uassoc (0) | 2025.12.19 |
|---|---|
| array_intersect_ukey (0) | 2025.12.18 |
| array_intersect (0) | 2025.12.16 |
| array_diff (0) | 2025.12.15 |
| natcasesort (0) | 2025.12.14 |