PHP에서 배열을 처리 할 때 array_change_key_case () 및 array_merge () 는 모두 매우 일반적으로 사용되는 기능입니다. 하나는 배열 키를 케이스 케이스로 변환 할 수 있고 다른 하나는 어레이를 병합하는 데 사용됩니다. 둘 다 간단하고 간단한 것처럼 보이지만, 그렇다면 특히 그들을 다룰 때 쉽게 붙잡을 수 있습니다.
Array_change_key_case (array $ array, int $ case = case_lower) : 배열의 모든 키 이름을 소문자 또는 대문자로 변환합니다.
Array_Merge (Array ... $ 배열) : 하나 이상의 배열을 병합합니다.
PHP의 어레이의 주요 이름은 일부 함수에서 다른 "감도"를 표시합니다 (예 : Array_merge () 는 대소 문자를 사용하고 Array_change_key_case () 는 균일하게 균일합니다. 이로 인해 합병 중에 "중복되지 않은 중복 키"또는 "예기치 않은 덮어 쓰기"와 같은 문제가 발생할 수 있습니다.
$arr1 = ['Name' => 'Alice'];
$arr2 = ['name' => 'Bob'];
$result = array_merge(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
print_r($result);
Array
(
[name] => Bob
)
정상적으로 보입니다. 우리는 모두 소문자에 있기 때문입니다. 그러나 순서를 변경하면 :
$result = array_merge(
array_change_key_case($arr2, CASE_LOWER),
array_change_key_case($arr1, CASE_LOWER)
);
Array
(
[name] => Alice
)
참고 : 다루는 값은 다릅니다!
이는 Array_Merge () 및 Array_change_key_case ()를 사용할 때 처리 순서가 결과에 직접적인 영향을 미칩니다.
$arr1 = ['Name' => 'Alice'];
$arr2 = ['name' => 'Bob'];
$result = array_change_key_case(
array_merge($arr1, $arr2), CASE_LOWER
);
print_r($result);
Array
(
[name] => Bob
)
이 예에서는 array_merge () 가 합병 중에 이름 과 이름을 두 개의 다른 키로 간주하고 병합 후에 만 소문자가되므로 후자의 밥이 유지되도록 "반복되는 것처럼 보이지만 실제로는 모두 합병 할 때 존재합니다."
그리고 원래 의도는 특정 키에 따라 합병하는 것이며,이 글은 예기치 않은 행동을 유발할 수 있습니다.
이러한 함정을 피하려면이 두 기능을 사용할 때 다음 규칙을 따르는 것이 좋습니다.
먼저 키 이름의 위와 하부 사례를 통합 한 다음 병합하십시오.
$result = array_merge(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
데이터 소스의 케이스 스타일이 일관되게 유지하십시오. 데이터 생성 또는 소스 단계에서 사례 표준을 통합하는 것이 가장 좋습니다.
Array_Merge () 대신 array_replace () 를 사용하는 것을 고려하십시오.
$result = array_replace(
array_change_key_case($arr1, CASE_LOWER),
array_change_key_case($arr2, CASE_LOWER)
);
Array_Merge () 는 사례에 민감합니다 .
array_change_key_case ()는 키 이름의 상부 및 하부를 통합하는 데 사용됩니다.
둘이 조합하여 사용되면, 시퀀스 순서 와 키의 원래 사례는 최종 결과에 영향을 미칩니다.
실제 개발에서 "우발적 인 손실"을 피하기 위해 병합하기 전에 사례 변환을 수행해야합니다.
이러한 종류의 함정은 특히 인터페이스 집계 (예 : https://api.m66.net/userinfo 및 https://api.m66.net/userdetail )와 같은 멀티 시스템 또는 다중 소스 데이터 병합의 응용 프로그램 시나리오에서 발생하기 쉽습니다. 사전에 케이스를 처리하지 않으면 키 필드를 알지 못하고 "덮어 쓰기"할 수 있습니다.
이 기사가 함정을 피하는 데 도움이되기를 바랍니다!