PHP에서 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에 있지 않은 요소를 반환합니다.
그러나 숫자 인덱스 배열에서 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
)
Array1 의 요소 1 과 4가 Array2 에 나타나지 않더라도 반환 된 결과는 여전히 원래의 주요 값 ( 0 및 3 )을 유지합니다. 반환 된 배열이 순서대로 구사 될 것으로 예상하면이 동작이 귀찮게 될 수 있습니다.
때로는 배열의 숫자 인덱스로 인해 결과가 기대치와 일치하지 않을 수 있습니다. 예를 들어, 데이터 처리를 수행 할 때 후속 작업의 배열 인덱스에 의존하면 원본 인덱스를 유지하기위한 Array_Diff () 의 동작이 논리를 파괴 할 수 있습니다. 예를 들어:
$array1 = [10, 20, 30, 40];
$array2 = [20, 30];
$result = array_diff($array1, $array2);
print_r($result);
산출:
Array
(
[0] => 10
[3] => 40
)
반환 된 어레이에 10 과 40 만 남아 있지만 원래 인덱스를 유지합니다. 결과에서 작동 해야하는 경우 잘못된 인덱스로 인해 일부 문제가 발생할 수 있습니다.
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 ()를 사용하면 원래 배열에서 인덱스를 유지하지 않고 반환 된 배열이 순서대로 정리되어 있는지 확인할 수 있습니다.
주요 예약 : Array_Diff ()는 원래 배열의 키 값을 유지하여 결과 배열의 인덱스가 예상과 다를 수 있습니다.
배열 값 비교 : array_diff ()는 값을 기반으로 배열을 비교하지만 배열에 중복 요소가 있으면 최종 결과에 영향을 줄 수 있습니다.
REINDEX : 배열을 순서대로 다시 표시 해야하는 경우 array_values ()를 사용하여 인덱스 불일치를 피할 수 있습니다.
Array_Diff () 는 매우 강력한 기능이지만 숫자 인덱스 어레이를 사용할 때는 핵심 값을 유지하는 동작에주의하십시오. 경우에 따라 원하는 결과를 달성하기 위해 배열을 다시 인덱싱하는 것과 같은 결과를 추가 처리해야 할 수도 있습니다.
Array_Diff () 함수의 동작, 특히 배열의 키와 값을 처리하는 방법을 이해함으로써 이러한 "트랩"을 피하고이 기능을 효율적으로 사용할 수 있습니다.