PHP에서 array_diff_assoc() 함수는 키-값의 우선순위를 지정하면서 두 배열 간의 차이를 찾도록 설계되었습니다. 한 쌍. 그러나 이 함수를 사용하여 다른 2D 배열과의 교차점을 기준으로 2D 배열의 행을 필터링하는 동안 항상 예상한 결과가 나오지 않을 수 있습니다.
이 문제는 다음으로 인해 발생합니다. array_diff_assoc()에 의해 수행되는 엄격한 비교입니다. 비교 중에 키-값 쌍의 문자열 표현을 비교합니다. 즉, 두 키-값 쌍에 동일한 값이 포함되어 있어도 문자열 표현이 동일하지 않으면 동일한 것으로 간주되지 않습니다.
다음 샘플 데이터를 고려하세요.
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
array_diff_assoc()을 사용하여 $array2의 행을 기반으로 $array1을 필터링하려고 하면 잘못된 출력이 표시됩니다.
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
이 출력은 결과에 공통 행이 있음을 보여 주지만 의도한 출력에는 $array1의 독점 행이 포함되어야 합니다.
앞서 언급했듯이 문제는 array_diff_assoc()에 의해 수행되는 엄격한 비교에 있습니다. 다음 두 배열을 비교할 때:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
키-값 쌍이 문자열이 동일하지 않기 때문에 함수는 다른 키-값 쌍을 결과로 반환합니다.
이 문제를 해결하기 위해 배열:
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
이 접근 방식은 in_array()를 사용하여 $array1의 각 행이 $array2에 있는지 확인합니다. $array2에 행이 없으면 필터링된 결과에 포함됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3