PHP 프로그래밍에서 Array_Diff_Assoc () 함수는 두 개 이상의 배열의 키 값 쌍을 비교하여 첫 번째 배열에 있지만 다른 배열에서는 그렇지 않은 키 값 쌍을 반환하는 데 사용됩니다. 배열의 합을 비교하여 작동합니다. 그러나 많은 개발자들은 특히 문자열 및 숫자 유형을 다룰 때 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 () 는 그것들을 다르게 고려하여 차이로 반환합니다.
이 문제는 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"이 동일하지만 함수는 일치하지 않는 유형으로 인해 다른 것으로 간주합니다 (하나는 문자열이고 다른 하나는 정수입니다).
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 이 다르다고 생각합니다.
유형 불일치로 인한 비교 오류를 피하려면 Array_Diff_Assoc ()를 사용할 때 배열의 값 유형이 일관되도록하는 것이 좋습니다. 다른 유형의 값을 비교 해야하는 경우 명시 적으로 유형 변환을 수행하는 것을 고려할 수 있습니다.
비교를하기 전에 모든 값은 예를 들어 문자열 또는 숫자로 동일한 유형으로 명시 적으로 변환 될 수 있습니다.
<?php
$array1 = ['a' => (string) 123];
$array2 = ['a' => '123'];
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
이 코드는 둘 다 동일한 유형 (문자열)을 보장하므로 불필요한 오류를 피합니다.
배치를 배치 해야하는 경우 배열의 모든 값을 처리 해야하는 경우 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 () 비교에서 일관성을 유지하도록합니다.
array_diff_assoc () 함수를 사용할 때는 php의 암시 적 유형 변환으로 인해 문자열과 숫자 유형이 종종 잘못됩니다. 개발자가 배열 비교를 수행하면 비교와 관련된 모든 값 유형이 일관되도록하는 것이 가장 좋습니다. 명시 적 유형 변환 또는 array_map () 과 같은 도우미 기능의 사용은 유형 불일치로 인한 문제를 피하기 때문에 비교를보다 정확하게 만듭니다.