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 중국어 웹사이트의 기타 관련 기사를 참조하세요!