PHP에서 배열을 다루다 보면 두 배열이 같은 요소를 포함하고 있는지 확인하기 위해 비교해야 하는 경우가 자주 발생합니다. 배열의 동등성은 여러 가지 의미로 해석될 수 있습니다. 같은 순서로 같은 요소를 갖는 경우, 순서와 관계없이 같은 요소를 갖는 경우, 나아가 데이터 타입까지 엄격하게 일치해야 하는 경우가 그 예입니다. 이 글에서는 PHP에서 두 배열이 같은지 확인하는 다양한 방법을 코드 예제와 함께 살펴보겠습니다.
== 연산자 사용하기
== 연산자는 느슨한(loose) 비교를 수행합니다. 엄격한 타입 검사 없이 두 배열이 같은 순서로 같은 요소를 갖고 있는지만 확인합니다.
<?php
$arr1 = [1, 2, 3, 4];
$arr2 = [1, 2, 3, 4];
if ($arr1 == $arr2) {
echo "두 배열은 같습니다";
} else {
echo "두 배열은 같지 않습니다";
}
?>
두 배열은 같습니다
=== 연산자 사용하기
=== 연산자는 엄격한(strict) 비교를 수행하며, 값뿐만 아니라 데이터 타입까지 모두 검사합니다. 따라서 값이 같아도 타입이 다르면 같지 않다고 판단합니다.
<?php
$array1 = [1, 2, 3, 4];
$array2 = [1, 2, '3', 4];
if ($array1 === $array2) {
echo "두 배열은 같습니다!";
} else {
echo "두 배열은 같지 않습니다!";
}
?>
두 배열은 같지 않습니다!
위 예제에서 $array2의 세 번째 요소는 문자열 '3'이므로, 정수 3과 비교했을 때 타입이 달라 두 배열은 같지 않은 것으로 판별됩니다.
array_diff() 함수 사용하기
array_diff() 함수는 배열들을 비교하여 차이가 있는 요소를 반환합니다. 순서와 무관하게 배열을 비교하려면 양방향 모두에서 차이가 존재하는지 확인해야 합니다.
<?php
$array1 = [1, 2, 3];
$array2 = [3, 2, 1];
if (empty(array_diff($array1, $array2)) && empty(array_diff($array2, $array1))) {
echo "배열이 같습니다";
} else {
echo "배열이 같지 않습니다";
}
?>
배열이 같습니다
순서 무관 비교를 위한 정렬 방식
요소의 순서가 중요하지 않다면, 두 배열을 먼저 오름차순으로 정렬한 뒤 == 연산자로 비교하는 간단한 방법도 효과적입니다.
<?php
$array1 = [3, 2, 1];
$array2 = [1, 2, 3];
// 두 배열 정렬
sort($array1);
sort($array2);
// 정렬된 배열 비교
if ($array1 == $array2) {
echo "두 배열은 같습니다";
} else {
echo "두 배열은 같지 않습니다";
}
?>
두 배열은 같습니다
비교 방법 한눈에 보기
| 방법 | 타입 검사 | 순서 민감 여부 | 적합한 용도 |
|---|---|---|---|
== |
느슨함 | 예 | 같은 순서, 혼합 타입 허용 |
=== |
엄격함 | 예 | 값과 타입이 모두 일치해야 하는 경우 |
array_diff() |
느슨함 | 아니오 | 순서와 무관한 비교 |
정렬 + == |
느슨함 | 아니오 | 순서 무관, 단순 구조의 배열 |
결론
값과 타입까지 엄격하게 검사하려면 ===를, 순서를 고려한 느슨한 비교에는 ==를, 순서와 무관한 비교에는 array_diff() 또는 정렬 후 비교 방식을 사용하는 것이 좋습니다. 각 방법은 서로 다른 비교 요구 사항에 맞게 설계되어 있으므로, 프로젝트의 상황과 목적에 가장 적합한 방법을 선택하시기 바랍니다.