현재 위치: > 최신 기사 목록> array_diff_assoc ()의 문자열과 숫자 유형 비교

array_diff_assoc ()의 문자열과 숫자 유형 비교

M66 2025-06-07

PHP 프로그래밍에서 Array_Diff_Assoc () 함수는 두 개 이상의 배열의 키 값 쌍을 비교하여 첫 번째 배열에 있지만 다른 배열에서는 그렇지 않은 키 값 쌍을 반환하는 데 사용됩니다. 배열의 합을 비교하여 작동합니다. 그러나 많은 개발자들은 특히 문자열 및 숫자 유형을 다룰 때 Array_Diff_Assoc ()를 사용할 때 문제가 발생합니다. 이 기사는 이러한 일반적인 오해와 그 이유를 탐구 할 것입니다.

1. Array_Diff_Assoc () 작동 방식

문제를 자세히 논의하기 전에 Array_Diff_Assoc () 함수의 기본 사용을 검토해 봅시다.

 <?php
$array1 = ['a' => 'apple', 'b' => 10, 'c' => 15];
$array2 = ['a' => 'apple', 'b' => '10', 'c' => 20];
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

출력 결과는 다음과 같습니다.

 Array
(
    [b] => 10
    [c] => 15
)

위의 예에서는 배열 $ array2'b' 키 값이 문자열 '10' 이고 $ array1'b' 키 값은 정수 10 , array_diff_assoc () 는 그것들을 다르게 고려하여 차이로 반환합니다.

2. 문자열과 숫자 유형의 암시 적 문제

이 문제는 PHP의 암시 적 유형 변환으로 발생합니다. 다른 유형의 데이터를 비교하려고 할 때 PHP는 자동으로 동일한 유형으로 변환합니다. 예를 들어, Array_Diff_Assoc () 비교를 수행 할 때 배열의 키 값 쌍이 문자열 유형과 숫자 유형을 포함하면 PHP가 다른 유형으로 취급하여 오류가 발생합니다.

예를 들어:

 <?php
$array1 = [0 => '10'];
$array2 = [0 => 10];
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

이 코드 출력 :

 Array
(
    [0] => 10
)

Array_Diff_Assoc () 는 키와 값을 비교하는 데 사용되지만 배열에서 "10"이 동일하지만 함수는 일치하지 않는 유형으로 인해 다른 것으로 간주합니다 (하나는 문자열이고 다른 하나는 정수입니다).

3. 유형 변환의 잠재적 문제

PHP의 암시 적 유형 변환으로 인해 array_diff_assoc () 함수가 부정확 한 결과를 반환 할 수 있습니다. 예를 들어, 문자열을 전달하고 숫자를 비교로 전달하면 PHP는 컨텍스트에 따라 숫자를 기본적으로 숫자로 숫자로 변환합니다.

예를 들어 다음 코드는 오류가 발생합니다.

 <?php
$array1 = ['a' => '123'];
$array2 = ['a' => 123];
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

산출:

 Array
(
    [a] => 123
)

Array_Diff_Assoc ()는 '123'과 123은 문자열이고 다른 하나는 숫자이기 때문에 결과가 기대치를 충족시키지 못하게하기 때문에 '123'123 이 다르다고 생각합니다.

4. 이러한 오해를 피하는 방법은 무엇입니까?

유형 불일치로 인한 비교 오류를 피하려면 Array_Diff_Assoc ()를 사용할 때 배열의 값 유형이 일관되도록하는 것이 좋습니다. 다른 유형의 값을 비교 해야하는 경우 명시 적으로 유형 변환을 수행하는 것을 고려할 수 있습니다.

4.1 명백한 변환 유형

비교를하기 전에 모든 값은 예를 들어 문자열 또는 숫자로 동일한 유형으로 명시 적으로 변환 될 수 있습니다.

 <?php
$array1 = ['a' => (string) 123];
$array2 = ['a' => '123'];
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

이 코드는 둘 다 동일한 유형 (문자열)을 보장하므로 불필요한 오류를 피합니다.

4.2 Array_Map ()을 사용하여 배열에서 값을 변환하십시오

배치를 배치 해야하는 경우 배열의 모든 값을 처리 해야하는 경우 Array_Map () 함수를 사용할 수 있습니다.

 <?php
$array1 = ['a' => 123, 'b' => 456];
$array2 = ['a' => '123', 'b' => '456'];
$array1 = array_map('strval', $array1); // 모든 값을 문자열로 변환합니다
$array2 = array_map('strval', $array2);
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

이를 통해 두 배열의 값이 Array_diff_assoc () 비교에서 일관성을 유지하도록합니다.

5. 요약

array_diff_assoc () 함수를 사용할 때는 php의 암시 적 유형 변환으로 인해 문자열과 숫자 유형이 종종 잘못됩니다. 개발자가 배열 비교를 수행하면 비교와 관련된 모든 값 유형이 일관되도록하는 것이 가장 좋습니다. 명시 적 유형 변환 또는 array_map () 과 같은 도우미 기능의 사용은 유형 불일치로 인한 문제를 피하기 때문에 비교를보다 정확하게 만듭니다.