현재 위치: > 최신 기사 목록> Array_Diff () 및 숫자 인덱스 어레이의 함정

Array_Diff () 및 숫자 인덱스 어레이의 함정

M66 2025-05-14

PHP에서 array_diff () 함수는 종종 둘 이상의 배열을 비교하고 첫 번째 배열에 존재하지만 다른 배열에는없는 요소를 포함하는 배열을 반환하는 데 사용됩니다. 이 기능은 매우 일반적이고 실용적이지만, 특히 숫자 인덱스 어레이를 처리 할 때 사용할 때 문제가 발생할 수 있습니다.

1. array_diff ()의 기본 사용

Array_diff () 함수는 매개 변수로 둘 이상의 배열을 가져 오고이 배열의 요소를 비교하며 첫 번째 배열에 존재하고 다른 배열에 존재하지 않는 값을 포함하는 배열을 반환합니다. 예를 들어:

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

산출:

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

위의 예에서, Array_diff ()는 array $ array1 에 존재하지만 $ array2-1 및 4에 있지 않은 요소를 반환합니다.

2. 디지털 인덱스 어레이의 함정

그러나 숫자 인덱스 배열에서 Array_Diff ()를 사용하면 때때로 배열의 요소가 복제 된 경우 또는 기대 결과가 실제 결과와 다른 경우 예기치 않은 동작에 직면 할 수 있습니다.

2.1 배열의 키가 보존됩니다

Array_Diff ()는 배열 값을 비교할뿐만 아니라 배열의 키를 비교합니다. 이는 반환 된 배열이 재주문 대신 첫 번째 어레이에서 키를 유지한다는 것을 의미합니다.

예를 들어:

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

산출:

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

Array1 의 요소 14가 Array2 에 나타나지 않더라도 반환 된 결과는 여전히 원래의 주요 값 ( 03 )을 유지합니다. 반환 된 배열이 순서대로 구사 될 것으로 예상하면이 동작이 귀찮게 될 수 있습니다.

2.2 키 값은 논리적 오류를 유발할 수 있습니다

때로는 배열의 숫자 인덱스로 인해 결과가 기대치와 일치하지 않을 수 있습니다. 예를 들어, 데이터 처리를 수행 할 때 후속 작업의 배열 인덱스에 의존하면 원본 인덱스를 유지하기위한 Array_Diff () 의 동작이 논리를 파괴 할 수 있습니다. 예를 들어:

 $array1 = [10, 20, 30, 40];
$array2 = [20, 30];
$result = array_diff($array1, $array2);
print_r($result);

산출:

 Array
(
    [0] => 10
    [3] => 40
)

반환 된 어레이에 1040 만 남아 있지만 원래 인덱스를 유지합니다. 결과에서 작동 해야하는 경우 잘못된 인덱스로 인해 일부 문제가 발생할 수 있습니다.

2.3 솔루션 : Reindex 배열

array_diff ()가 다시 표시되지 않는 문제를 해결하려면 array_values ​​() 함수를 사용하여 비교 후 결과 배열을 다시 표시 할 수 있습니다.

 $array1 = [10, 20, 30, 40];
$array2 = [20, 30];
$result = array_diff($array1, $array2);
$result = array_values($result);
print_r($result);

산출:

 Array
(
    [0] => 10
    [1] => 40
)

Array_Values ​​()를 사용하면 원래 배열에서 인덱스를 유지하지 않고 반환 된 배열이 순서대로 정리되어 있는지 확인할 수 있습니다.

3. Array_Diff ()를 사용할 때 FAQ 요약

  • 주요 예약 : Array_Diff ()는 원래 배열의 키 값을 유지하여 결과 배열의 인덱스가 예상과 다를 수 있습니다.

  • 배열 값 비교 : array_diff ()는 값을 기반으로 배열을 비교하지만 배열에 중복 요소가 있으면 최종 결과에 영향을 줄 수 있습니다.

  • REINDEX : 배열을 순서대로 다시 표시 해야하는 경우 array_values ​​()를 사용하여 인덱스 불일치를 피할 수 있습니다.

4. 요약

Array_Diff () 는 매우 강력한 기능이지만 숫자 인덱스 어레이를 사용할 때는 핵심 값을 유지하는 동작에주의하십시오. 경우에 따라 원하는 결과를 달성하기 위해 배열을 다시 인덱싱하는 것과 같은 결과를 추가 처리해야 할 수도 있습니다.

Array_Diff () 함수의 동작, 특히 배열의 키와 값을 처리하는 방법을 이해함으로써 이러한 "트랩"을 피하고이 기능을 효율적으로 사용할 수 있습니다.