>  기사  >  백엔드 개발  >  일반 행을 제외하면서 다른 배열 행을 기준으로 2D 배열 행을 필터링하는 방법은 무엇입니까?

일반 행을 제외하면서 다른 배열 행을 기준으로 2D 배열 행을 필터링하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 11:15:02324검색

How to Filter 2D Array Rows by Another Array Rows While Excluding Common Rows?

다른 배열 행으로 2D 배열 행 필터링

2차원 배열로 작업할 때는 특정 기준에 따라 행을 필터링하는 것이 중요합니다. 이 문서에서는 공통 행을 제외하고 한 배열의 행을 다른 배열의 행으로 필터링하는 일반적인 문제를 다룹니다.

문제:

array_diff_assoc( ) 이 필터링을 수행하면 의도한 고유 행 대신 일반 행이 반환됩니다.

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

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

array_diff_assoc($array1, $array2)를 호출한 후에도 출력에는 여전히 공통 행이 포함됩니다.

<code class="php">[
    [11 => 'common set']
]</code>

해결책:

문제의 근본 원인은 array_diff_assoc()에서 사용하는 비교 메커니즘에 있습니다. 이는 엄격한 비교를 사용합니다. 즉, 값의 문자열 표현이 정확하게 일치해야 함을 의미합니다. 주어진 예에서 두 배열의 키 11과 연관된 값은 '공통 세트'입니다. 그러나 array_diff_assoc()은 서로 다른 배열에 저장되기 때문에 이를 고유한 값으로 처리합니다.

원하는 필터링 동작을 얻으려면 배열에 저장된 실제 값을 고려한 비교를 사용해야 합니다. 이를 달성하는 한 가지 방법은 모든 배열 요소를 비교하기 전에 공통 유형으로 변환하는 것입니다. 다음은 json_encode()를 사용하는 예입니다.

<code class="php">$json_array1 = array_map('json_encode', $array1);
$json_array2 = array_map('json_encode', $array2);

$filtered_rows = array_diff_assoc($json_array1, $json_array2);

$filtered_rows = array_map('json_decode', $filtered_rows);</code>

이 접근 방식은 각 배열 요소를 JSON 문자열로 변환하고 이제 실제 값을 기반으로 비교가 이루어지도록 합니다. 필터링 작업은 고유한 행만 올바르게 식별하고 반환합니다.

<code class="php">[
    [12 => 'new q sets']
]</code>

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

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