>  기사  >  백엔드 개발  >  PHP에서 다른 2D 배열과의 교차점을 기반으로 2D 배열의 행을 필터링하는 방법은 무엇입니까?

PHP에서 다른 2D 배열과의 교차점을 기반으로 2D 배열의 행을 필터링하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 06:24:30597검색

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

행 교차점을 기반으로 2D 배열의 행 필터링

PHP에서 array_diff_assoc() 함수는 키-값의 우선순위를 지정하면서 두 배열 간의 차이를 찾도록 설계되었습니다. 한 쌍. 그러나 이 기능을 사용하여 다른 2D 배열과의 교차점을 기준으로 2D 배열의 행을 필터링하는 경우 항상 예상한 결과가 나오지 않을 수 있습니다.

문제 이해

문제는 다음으로 인해 발생합니다. array_diff_assoc()에 의해 수행되는 엄격한 비교입니다. 비교 중에 키-값 쌍의 문자열 표현을 비교합니다. 즉, 두 키-값 쌍에 동일한 값이 포함되어 있어도 문자열 표현이 동일하지 않으면 동일한 것으로 간주되지 않습니다.

샘플 데이터

다음 샘플 데이터를 고려하세요.

<code class="php">$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];</code>

잘못된 출력

$array2의 행을 기반으로 $array1을 필터링하기 위해 array_diff_assoc()을 사용하려고 하면 잘못된 출력이 표시됩니다.

<code class="php">$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]</code>

이것은 출력에는 공통 행이 결과에 존재하는 것으로 표시되지만, 의도한 출력에는 $array1의 배타적 행이 포함되어야 합니다.

문제 원인

앞서 언급했듯이 문제는 array_diff_assoc()에 의해 엄격한 비교가 수행됩니다. 다음 두 배열을 비교할 때:

<code class="php">Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )</code>

키-값 쌍이 문자열이 동일하지 않기 때문에 함수는 다른 키-값 쌍을 결과로 반환합니다.

올바른 접근 방식

이 문제를 해결하기 위해 배열에 특정 키-값이 있는지 확인하는 약간 다른 접근 방식을 사용할 수 있습니다.

<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]</code>

이 접근 방식은 in_array()를 사용하여 각 행이 있는지 확인합니다. $array1의 항목이 $array2에 있습니다. $array2에 행이 없으면 필터링된 결과에 포함됩니다.

위 내용은 PHP에서 다른 2D 배열과의 교차점을 기반으로 2D 배열의 행을 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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