현재 위치: > 최신 기사 목록> DATERAY_DIFF_KEY ()를 사용할 때 데이터 유형 감도 문제

DATERAY_DIFF_KEY ()를 사용할 때 데이터 유형 감도 문제

M66 2025-05-17

PHP에서 array_diff_key () 함수는 둘 이상의 배열을 비교하는 데 사용되며 첫 번째 배열에는 키 이름 (키 값 쌍)이 포함 된 배열을 반환하지만 다른 배열에는 없습니다. 그러나이 기능을 사용할 때 개발자는 키 이름의 데이터 유형에 특별한주의를 기울여야합니다. 다른 데이터 유형이 기능의 동작에 영향을 줄 수 있으므로.

1. array_diff_key () 함수의 개요

array_diff_key () 함수의 구문은 다음과 같습니다.

 array_diff_key(array $array1, array $array2, array ...$arrays): array

이 기능은 $ array1을 후속 배열 ( $ array2 , $ array3 등)과 비교하고 $ array1 에 존재하지만 다른 배열에는 존재하지 않는 키 이름을 포함하는 새 배열을 반환합니다. 구체적으로, 그것은 키 이름을 비교하여 작동합니다.

샘플 코드 :

 $array1 = ['a' => 'apple', 'b' => 'banana', 10 => 'ten'];
$array2 = ['a' => 'apple', 'c' => 'cherry', 10 => 'ten'];
$result = array_diff_key($array1, $array2);

print_r($result);

산출:

 Array
(
    [b] => banana
)

이 예에서 Array_Diff_Key () 함수는 $ array1$ array2를 비교하고 키 이름 B 에 해당하는 요소를 반환합니다. $ array1 에 존재하지만 $ array2 는 아닙니다.

2. 키 이름 데이터 유형 문제

array_diff_key () 가 키 이름 비교를 수행하면 키 이름의 데이터 유형이 고려됩니다. 즉, 두 배열의 주요 이름이 시각적으로 유사하지만 데이터 유형이 다른 경우 PHP는이를 다른 키로 취급합니다. 이 기능은 종종 개발자가 실수로 어려운 문제를 일으키기 어려운 문제를 겪게합니다.

예 : 다른 데이터 유형의 주요 이름

 $array1 = ['10' => 'value1'];
$array2 = [10 => 'value2'];
$result = array_diff_key($array1, $array2);

print_r($result);

산출:

 Array
(
    [10] => value1
)

이 예에서, Array1Array2 는 키 값 10 , $ array1 에서 키 10은 문자열이고, $ array2 에서 키 10은 정수입니다. PHP에서 문자열 '10' 과 정수 10은 다른 키 이름으로 취급됩니다. 결과적으로 Array_diff_key ()는 일치하지 않는다고 생각하므로 Key 10을 $ array1 로 반환합니다.

예 : 문자열과 정수 키 이름 비교

 $array1 = ['10' => 'apple', 10 => 'orange'];
$array2 = [10 => 'banana'];
$result = array_diff_key($array1, $array2);

print_r($result);

산출:

 Array
(
    [10] => apple
)

Array1 에는 두 개의 키가 있지만 '10' (문자열 유형)과 10 (적분 유형)이 있지만 array_diff_key ()는 키 이름의 다른 데이터 유형으로 인해 두 개의 다른 키로 취급합니다. 따라서 10이 $ array2 에 있더라도 '10'10 은 여전히 ​​다른 키로 처리됩니다. 반환 된 결과는 여전히 10 에 해당하는 요소를 포함합니다.

3. 왜 이것이 문제를 일으키는가?

기조 이름을 배열과 비교하면 기조 이름의 데이터 유형이 항상 명시 적으로 변환되지는 않을 수 있습니다. 다른 데이터 유형으로 인해 동일한 키 이름이 실수로 다른 키로 처리 될 수 있으므로 Array_Diff_Key () 가 예상대로 작동하지 않습니다. 이 상황은 혼합 유형 어레이를 비교할 때 특히 분명합니다.

예 : URL의 키 이름 유형 문제

URL을 포함하는 두 개의 배열을 함수의 키로 비교한다고 가정 해 봅시다. 이러한 URL이 키 이름과 다른 유형 인 경우 문제가 발생할 수 있습니다.

 $array1 = ['http://m66.net/page1' => 'content1'];
$array2 = ['http://m66.net/page1' => 'content2'];
$result = array_diff_key($array1, $array2);

print_r($result);

산출:

 Array
(
    [http://m66.net/page1] => content1
)

두 배열의 키는 정확히 동일하게 보이지만 URL이 다른 곳에서 다르게 처리되거나 (예 : 다른 견적 유형 사용 또는 일부 유형 변환을 수행하는 경우) 결과에 영향을 줄 수 있습니다.

4. 키 이름 유형으로 인한 문제를 피하는 방법은 무엇입니까?

주요 이름 유형으로 인한 잠재적 문제를 피하기 위해 다음과 같은 조치를 취할 수 있습니다.

  • 통합 키 이름 데이터 유형 : 배열을 만들 때 키 이름 데이터 유형이 일관되어 있는지 확인하십시오. 예를 들어, 문자열이나 정수를 균일하게 배열로 키로 사용하십시오.

  • 주조 사용 : 키 이름 비교를 수행하기 전에 strval () 또는 intval () 과 같은 함수를 사용하여 키 이름의 데이터 유형이 일관되도록하십시오.

 $array1 = [strval(10) => 'value1'];
$array2 = [10 => 'value2'];
$result = array_diff_key($array1, $array2);

print_r($result);

키 이름의 데이터 유형을 통합하면 다른 유형으로 인한 오류를 피하십시오.

결론적으로

Array_Diff_Key () 함수는 다른 키 이름 데이터 유형의 영향을 받으 므로이 기능을 사용할 때는 특별한주의가 필요합니다. 키 이름 유형의 배열 유형이 일치하지 않으면 PHP는 시각적으로 동일하더라도 다른 키로 취급합니다. 이는 특히 URL 또는 동적으로 생성 된 기타 키 이름을 포함하는 배열을 처리 할 때 발견하기 어려운 문제를 일으킬 수 있습니다. 이러한 문제를 피하기 위해 키 이름의 데이터 유형을 통합하거나 키 이름 비교를 수행하기 전에 변환을 입력하는 것이 좋습니다.

위는 array_diff_key () 함수 사용에서 키 이름 데이터 유형 문제에 대한 자세한 설명입니다. 이 기사가 array_diff_key () 함수를 더 잘 이해하고 사용하는 데 도움이되기를 바랍니다.