현재 위치: > 최신 기사 목록> array_diff ()가 내가 예상 한 결과를 반환하지 않는 이유는 무엇입니까?

array_diff ()가 내가 예상 한 결과를 반환하지 않는 이유는 무엇입니까?

M66 2025-05-14

Array_Diff () 는 PHP에서 매우 실용적인 배열 기능입니다. 이 기능은 첫 번째 배열에 존재하지만 다른 배열에는없는 배열에서 값을 반환하는 것입니다. 구문은 단순 해 보이지만 실제로 사용될 때 종종 "결과가 잘못 되나요?" 이 기사는 일반적인 오류 사용 및 디버깅 기술을 요약하여 Array_Diff ()를 보다 효율적으로 사용하는 데 도움이됩니다.

1. 기본 사용법 검토

 $array1 = ["apple", "banana", "cherry"];
$array2 = ["banana", "cherry"];
$result = array_diff($array1, $array2);
print_r($result);

산출:

 Array
(
    [0] => apple
)

보시다시피, array_diff ()는 키 이름에 관계없이 값을 비교하고 $ array1 이지만 $ array2 에 있지 않은 부분을 반환합니다.

2. 일반적인 오류 및 트랩

1. 일관되지 않은 데이터 유형은 일치 실패로 이어집니다

 $array1 = [1, 2, 3];
$array2 = ["2", "3"];
$result = array_diff($array1, $array2);
print_r($result);

예상 출력 :

 Array
(
    [0] => 1
)

실제 출력 :

 Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

array_diff ()는 비 강력한 비교를 사용하기 때문입니다 ( === 대신 == ). 어떤 경우에는 문자열과 숫자가 서로를 성공적으로 변환하지 않아 비교 실패가 발생합니다.

솔루션 : 사용자 정의 비교 함수와 함께 Array_udiff ()를 사용하여 "엄격한 비교"를 달성 할 수 있습니다.

 function strict_compare($a, $b) {
    return ($a === $b) ? 0 : 1;
}

$result = array_udiff($array1, $array2, 'strict_compare');
print_r($result);

2. 배열에 중복 값이있을 때 오해

 $array1 = ["apple", "banana", "apple"];
$array2 = ["banana"];
$result = array_diff($array1, $array2);
print_r($result);

산출:

 Array
(
    [0] => apple
    [2] => apple
)

참고 : Array_Diff ()는 제거되지 않으며 원래 배열에서 모든 예외 값과 원래 키 이름을 유지합니다.

3. 연관 배열 키 이름의 효과

 $array1 = ["a" => "apple", "b" => "banana"];
$array2 = ["banana"];
$result = array_diff($array1, $array2);
print_r($result);

산출:

 Array
(
    [a] => apple
)

배열이 연관 배열 인 경우에도 Array_diff ()는 값을 비교하고 키를 비교하지 않습니다. 키 이름은 결과에서 방금 보존됩니다.

3. 디버깅 기술과 제안

  1. 중간 변수를 인쇄하십시오

     var_dump($array1, $array2);
    

    통과하는 두 배열에 예기치 않은 문자열/번호 믹싱, 공백 또는 서식 문제가 없는지 확인하십시오.

  2. json_encode ()를 사용하여 데이터 구조 확인

     echo json_encode($array1);
    

    값의 유형 또는 암시 적 문자 (예 : 공백, 라인 브레이크 등)가 있는지 신속하게 보는 데 도움이됩니다.

  3. 기능 디버깅을 시도하십시오 Array_Udiff ()를 사용하는 경우 비교 함수에서 값 비교를보기 위해 로그 또는 디버그 문을 추가하는 것을 잊지 마십시오.

4. 실제 사례 : URL 필터링 실패 문제

장면:

 $urls = [
    "https://m66.net/page1",
    "https://m66.net/page2",
    "https://m66.net/page3"
];

$visited = [
    "https://m66.net/page2",
    "https://m66.net/page3"
];

$unvisited = array_diff($urls, $visited);
print_r($unvisited);

URL 중 하나에 후행 공간이 있거나 / 와 같은 작은 차이가 있으면 올바르게 비교할 수 없습니다!

데이터를 정리 한 다음 비교하는 것이 좋습니다.

 $urls = array_map('trim', $urls);
$visited = array_map('trim', $visited);
$unvisited = array_diff($urls, $visited);

V. 결론

Array_Diff () 는 강력한 도구이지만 비 강력한 비교와 비교하기 위해 값 만 사용하기 때문에 일관되지 않은 데이터 유형 또는 형식의 경우 오류를 쉽게 만들 수 있습니다. 근본적인 행동을 이해하고 적절한 디버깅 기술을 결합함으로써 우리는 진정으로 잘 사용할 수 있습니다.

이 기사가 Array_Diff ()를 사용할 때 발생하는 "결과가 잘못된 이유"의 문제를 해결하고 해결하는 데 도움이되기를 바랍니다. 보다 복잡한 시나리오 또는 비교 요구 사항이 발생하면 Array_udiff () 또는 사용자 정의 로직을 결합하여보다 세분화 된 제어를 달성 할 수도 있습니다.