PHP의 Array_Diff () 함수는 두 배열을 비교하고 첫 번째 배열의 모든 요소를 포함하는 배열을 반환하는 데 사용되지만 다른 배열은 아닙니다. 이 기능은 간단 해 보이지만 사용하면 디버깅 문제가 발생할 수 있습니다. 특히 반환 된 결과가 예상 한 것이 아니라는 것을 알게됩니다. 다음으로 Array_Diff () 함수의 결과를 디버깅하고 차이점을 찾고 문제를 해결하는 방법을 다룰 것입니다.
Array_Diff () 함수의 기본 구문은 다음과 같습니다.
array_diff(array $array1, array ...$arrays): array
$ array1 은 벤치 마크 배열, 즉 다른 배열과 비교하려는 배열입니다.
$ 배열 은 다른 배열이며, 비교하려는 배열은 여러 배열 일 수 있습니다.
예를 들어 다음 두 배열이 있다고 가정합니다.
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 3, 6];
Array_Diff ()를 사용하여 Array1 에서 요소를 찾을 수 있지만 Array2 에서는 그렇지 않습니다.
$result = array_diff($array1, $array2);
print_r($result);
출력 결과는 다음과 같습니다.
Array
(
[0] => 1
[3] => 4
[4] => 5
)
이는 1, 4 및 5가 Array1 에 존재하지만 Array2 에서는 존재하지 않는 요소임을 의미합니다.
Array_Diff ()를 사용할 때 결과가 반환되면 기대치를 충족하지 않으면 몇 가지 이유가있을 수 있습니다.
Array_diff ()는 요소의 값을 기준으로 비교하지만 엄격한 비교를 통해 차이를 찾습니다 (즉, 유형과 값 모두 동일해야 함). 배열 요소의 유형이 다른 경우 값이 동일하더라도 비교가 기대치와 일치하지 않도록 할 수 있습니다.
예를 들어:
$array1 = [1, 2, 3];
$array2 = ['1', '2', '3'];
$result = array_diff($array1, $array2);
print_r($result);
출력 결과는 다음과 같습니다.
Array
(
[0] => 1
[1] => 2
[2] => 3
)
값은 동일하게 보이지만 Array_Diff () 는 Array1 의 숫자 1, 2, 3이 array2 의 문자열 '1', '2', '3'과 같지 않다고 생각합니다. 이 문제를 해결하기 위해 먼저 어레이의 요소가 일관되거나 비교하기 전에 요소를 동일한 유형으로 변환 할 수 있습니다.
Array_Diff ()는 참조 배열에 키 이름을 유지합니다. 키 이름의 차이를 무시 해야하는 경우 array_values () 함수를 사용하여 배열을 다시 표시 할 수 있습니다.
$array1 = [1 => 1, 2 => 2, 3 => 3];
$array2 = [1 => 1, 2 => 2];
$result = array_diff(array_values($array1), array_values($array2));
print_r($result);
이렇게하면 키 이름이 다르기 때문에 차이가 피할 수 있습니다.
디버깅 할 때 먼저 배열의 내용을 출력하여 해당 구조와 데이터가 올바른지 확인할 수 있습니다. print_r () 또는 var_dump () 함수를 사용하여 배열의 세부 사항을 볼 수 있습니다.
print_r($array1);
print_r($array2);
다른 유형의 데이터가 아닌 배열을 비교하고 있는지 확인하십시오. 다른 유형의 변수를 실수로 전달하면 array_diff ()가 잘못된 결과를 반환합니다. IS_ARRAY ()를 사용하여 변수 유형을 확인할 수 있습니다.
if (!is_array($array1) || !is_array($array2)) {
echo "변수 중 하나는 배열이 아닙니다!";
}
배열 차이를보다 직관적으로 이해하려면 두 배열을 수동으로 루프하고 차이를 출력 할 수 있습니다. 예를 들어:
foreach ($array1 as $key => $value) {
if (!in_array($value, $array2)) {
echo "존재하다 array1 요소를 찾으십시오 $value, 但不존재하다 array2 가운데。\n";
}
}
이렇게하면 각 차이가 무엇인지 이해하고 더 나은 디버그하는 데 도움이됩니다.
프로젝트에 다음 코드가 있다고 가정합니다.
$array1 = ['apple', 'banana', 'cherry'];
$array2 = ['apple', 'grape', 'banana'];
$result = array_diff($array1, $array2);
print_r($result);
출력 결과는 다음과 같습니다.
Array
(
[2] => cherry
)
이 예에서는 반환이 체리 이며 다른 잠재적 차이를 확인하고 싶을 수도 있습니다. 더 나은 디버깅을 위해 두 개의 배열을 인쇄하고 각 요소가 올바른지 확인할 수 있습니다. 예를 들어:
print_r($array1);
print_r($array2);
이렇게하면 각 요소의 값을 명확하게보고 차이가 유형 불일치 또는 기타 이유에 기인한지 확인할 수 있습니다.
Array_Diff () 함수를 디버깅 할 때 키는 특히 유형 및 키 이름 측면에서 동작을 이해하는 것입니다. 배열의 구조 및 데이터 유형을주의 깊게 검토하고 각 차이를 수동으로 디버깅하면 문제를 효과적으로 식별하고 해결할 수 있습니다. Array_Diff () 에 의해 반환 된 결과가 여전히 예상대로 없다는 것을 알게되면, 숨겨진 유형 차이 또는 기타 논리적 오류가 없는지 확인하기 위해 배열의 데이터를 다시 방문해야 할 수도 있습니다.