>  기사  >  백엔드 개발  >  PHP의 `array_diff_assoc()` 함수를 사용하여 2D 배열에서 겹치는 행을 필터링하는 방법은 무엇입니까?

PHP의 `array_diff_assoc()` 함수를 사용하여 2D 배열에서 겹치는 행을 필터링하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-25 11:17:30113검색

How to Filter Overlapping Rows in 2D Arrays Using PHP's `array_diff_assoc()` Function?

겹치는 행을 기준으로 2D 배열의 행 필터링

PHP에서 array_diff_assoc() 함수는 일반적으로 두 배열의 차이를 확인하는 데 사용됩니다. 두 개의 배열. 그러나 2D 배열과 관련된 특정 시나리오에서는 사용자가 겹치는 행을 필터링하려고 시도할 때 예상치 못한 결과가 발생할 수 있습니다.

한 사용자가 array_diff_assoc()을 사용하여 두 개의 2D 배열을 비교했지만 결과에 두 배열의 공통 행이 포함되어 있음을 발견했습니다. 고유한 행 대신 배열을 사용합니다. 문제를 이해하기 위해 사용자가 제공한 샘플 데이터를 살펴보겠습니다.

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 => [
    [11 => 'common set']
];

array_diff_assoc($array1, $array2)를 호출한 후 사용자는 $array1의 고유 행만 포함하는 출력을 받을 것으로 예상했습니다. (즉, '[12 => '새로운 q 세트']'). 그러나 실제 출력은 다음과 같습니다.

[
    [11 => 'common set']
]

문제는 PHP가 array_diff_assoc()의 값을 비교하는 방식에 있습니다. 두 값은 문자열로서 엄격하게 동일한 경우에만 동일한 것으로 간주됩니다. 제공된 2D 배열의 경우 두 배열 모두에서 '11' 키와 연관된 값은 'common set' 문자열입니다. 그러나 키-값 쌍 자체는 배열과 동일하지 않습니다.

결과적으로 array_diff_assoc()가 두 배열을 비교하면 키-값 쌍 [11 => '공통 세트']는 두 배열 모두에 공통적이며 차이점에서 제외됩니다. 이 동작은 PHP의 모든 배열이 내부적으로 문자열 "Array"로 표시된다는 사실에서 비롯됩니다.

이 문제를 해결하려면 다른 접근 방식을 활용하여 2D 배열 사이에서 겹치는 행을 필터링할 수 있습니다. 일반적인 방법 중 하나는 각 행에 대한 고유 식별자를 생성하고 해당 식별자를 연관 배열의 키로 사용하는 것입니다. 예는 다음과 같습니다.

$uniqueIdentifiers = [];
$filteredRows = [];

foreach ($array1 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    $uniqueIdentifiers[$uniqueIdentifier] = true;
}

foreach ($array2 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    if (isset($uniqueIdentifiers[$uniqueIdentifier])) {
        unset($uniqueIdentifiers[$uniqueIdentifier]);
    }
}

foreach ($uniqueIdentifiers as $uniqueIdentifier => $isPresent) {
    $filteredRows[] = array_values(array_flip(explode('|', $uniqueIdentifier)));
}

이 접근 방식은 배열 값을 연결하고 이를 키로 사용하여 각 행에 대한 고유 식별자를 생성합니다. 그런 다음 두 번째 배열을 반복하고 목록에서 일치하는 고유 식별자를 모두 설정 해제합니다. 마지막으로 나머지 고유 식별자를 반복하고 키와 값을 뒤집어 행을 재구성한 다음 이를 $filteredRows 배열에 추가합니다.

이 방법을 활용하면 2D 배열 간에 겹치는 행을 효과적으로 필터링할 수 있습니다. 동시에 고유한 행이 올바르게 식별되어 결과에 반환되는지 확인합니다.

위 내용은 PHP의 `array_diff_assoc()` 함수를 사용하여 2D 배열에서 겹치는 행을 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.