php에서 array_diff_assoc () 는 두 배열을 비교하는 매우 유용한 함수이며, 두 번째 배열에 있지 않은 첫 번째 배열의 모든 요소를 반환하여 키 이름과 키 값 사이의 일관성을 보존합니다. 그러나 때로는 array_diff_assoc ()를 사용할 때 결과가 예상 한 것이 아니라는 것을 알 수 있습니다. 이 기사는이 문제의 일반적인 원인을 설명하고 문제를 진단하고 해결하는 데 도움이됩니다.
Array_Diff_Assoc () 의 함수는 두 번째 배열과 다른 첫 번째 배열에서 두 배열과 리턴 요소의 키와 값을 비교하는 것입니다. 기능 프로토 타입은 다음과 같습니다.
array_diff_assoc(array $array1, array $array2): array
이 기능은 $ array1 및 $ array2를 비교하고 $ array1 의 요소의 키와 값이 $ array2 와 다르면 이러한 요소가 반환됩니다.
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "berry",
"d" => "date"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
출력 결과 :
Array
(
[b] => banana
[c] => cherry
)
이 예에서는 array_diff_assoc () 가 Keys B 와 C 와 함께 $ array1 의 요소를 반환하고 값은 $ array2 의 값과 다릅니다.
배열의 다른 키와 값은 결과가 기대치를 충족시키지 못하게합니다.
Array_Diff_Assoc ()는 배열의 값을 비교할뿐만 아니라 키를 비교합니다. 두 배열의 키가 정확히 동일하지만 값이 다르면 이러한 요소는 여전히 다른 것으로 간주됩니다. 따라서 값의 차이에만 관심이있는 경우 값을 비교하고 키를 신경 쓰지 않는 Array_Diff () 함수를 사용해야 할 수도 있습니다.
예를 들어:
$array1 = ["a" => "apple", "b" => "banana"];
$array2 = ["a" => "apple", "b" => "berry"];
$result = array_diff_assoc($array1, $array2);
print_r($result);
출력 결과 :
Array
(
[b] => banana
)
B 의 값은 다르지만 동일한 키 이름으로 인해 다른 요소로 취급된다는 것을 알 수 있습니다.
배열에는 중첩 된 배열 또는 객체 <br>가 포함되어 있습니다 Array_Diff_Assoc ()을 사용하는 경우 배열에는 중첩 어레이 또는 객체가 포함되어 있으면 기능이 재귀 비교를 수행합니다. 이러한 중첩 요소가 올바르게 처리되지 않았거나 예상대로 비교되지 않으면 예상치 못한 결과가 발생할 수 있습니다. 이 경우 중첩 어레이 또는 객체의 구조를 디버깅하는 것이 매우 중요합니다.
다른 유형의 요소
PHP는 느슨하게 입력 된 언어이므로 배열의 요소는 다른 유형 일 수 있습니다. Array_diff_assoc ()는 값뿐만 아니라 값과 유형을 비교합니다. 두 배열에서 동일한 위치의 요소가 다른 경우, 값이 동일하게 보이더라도 함수는 다르게 고려됩니다.
예를 들어:
$array1 = [1 => "10", 2 => "20"];
$array2 = [1 => 10, 2 => 20];
$result = array_diff_assoc($array1, $array2);
print_r($result);
출력 결과 :
Array
(
[1] => 10
[2] => 20
)
"10"과 10 은 여기서 다르고, 하나는 문자열이고, 다른 하나는 정수이기 때문에, array_diff_assoc ()는 그들이 동일하지 않다고 생각합니다.
배열의 요소 순서 <br> Array_Diff_Assoc () 는 값을 비교할뿐만 아니라 키 이름도 포함하지만 배열의 순서를 고려합니다. 두 배열을 Array_Diff_Assoc () 로 전달하는 경우 내용이 동일하지만 순서대로 있지만 여전히 다른 배열로 간주됩니다.
$array1 = [1 => "apple", 2 => "banana"];
$array2 = [2 => "banana", 1 => "apple"];
$result = array_diff_assoc($array1, $array2);
print_r($result);
출력 결과 :
Array
(
[1] => apple
[2] => banana
)
배열의 순서가 다르기 때문에 결과는 Array1 의 모든 요소를 반환합니다.
배열의 키는 0 <br>부터 시작하지 않습니다. 경우에 따라 배열 키가 0에서 시작되지 않을 수 있으며 이는 Array_Diff_Assoc () 의 결과에도 영향을 미칩니다. 배열의 키가 무엇인지, 의도적으로 불연속 키를 사용하는지 이해해야합니다.
배열의 키에 관심이 없거나 키 차이를 고려하지 않고 값을 비교하면 array_diff ()를 사용하는 것이 좋습니다.
배열의 값과 주요 유형이 일관성이 있는지 확인하고 유형 불일치를 피하십시오.
배열에 중첩 된 배열이나 객체가있는 경우 예상대로 비교되는지 확인하거나 재귀적인 방식으로 디버그하십시오.
Array_diff_assoc () 는 강력한 기능이지만 비교 로직은 키와 값의 엄격한 일치를 기반으로합니다. 따라서 사용할 때 예상 결과를 얻지 못하면 일반적으로 배열의 키, 값 또는 순서의 차이로 인해 발생합니다. 이 기능이 어떻게 작동하는지 이해하고 배열의 키와 값이 기대치와 일치하는지 확인하면 가장 일반적인 문제를 피할 수 있습니다.