>  기사  >  백엔드 개발  >  평면 배열의 값을 일치시켜 배열 행을 필터링하는 방법은 무엇입니까?

평면 배열의 값을 일치시켜 배열 행을 필터링하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 16:41:02386검색

How to Filter Array Rows by Matching Values from a Flat Array?

단순 배열에서 값과 일치하는 배열 행 찾기

이 시나리오에서는 여러 열이 있는 $arr1 배열이 있고 ID 값 세트를 포함하는 두 번째 배열 $arr2. 목표는 $arr1을 필터링하고 $arr2에 있는 ID 값을 포함하는 행만 반환하는 것입니다.

이 문제에 대한 효율적인 해결책은 두 배열의 정렬된 교차를 수행하는 array_uintersect() 함수를 활용하는 것입니다. 사용자 정의 콜백 함수를 사용합니다. 이 함수는 두 입력 배열의 요소 쌍에 대해 작동하고 비교 결과에 따라 -1, 0 또는 1을 반환합니다.

사용자 정의 콜백:

사용자 정의 array_uintersect() 내에서 정의한 콜백 함수는 $arr1(있는 경우)의 ID 열 또는 열이 정의되지 않은 경우 전체 요소 자체를 $arr2의 값과 비교합니다.

<code class="php">fn($a, $b) => ($a['id'] ?? $a) <=> ($b['id'] ?? $b)</code>

삼항 사용 연산자를 사용하여 열이 존재하면 $a에 $a['id']를 할당하고 그렇지 않으면 $a 자체를 할당합니다. 마찬가지로 $b에 대해서도 동일한 작업을 수행합니다. 이를 통해 ID 열이 모든 행에 존재하지 않는 경우를 처리할 수 있습니다.

정렬 및 효율성:

Array_uintersect()는 정렬을 활용하여 요소를 효율적으로 비교합니다. 기본적으로 두 입력 배열을 모두 숫자로 정렬합니다. 귀하의 경우 숫자일 가능성이 있는 ID 값을 비교하므로 이 정렬을 통해 실행 시간이 향상됩니다.

사용 예:

이 솔루션의 작동 방식을 보여주기 위해, 이를 제공된 배열에 적용할 수 있습니다.

<code class="php">$arr1 = [
    ['key' => 0, 'id' => 14, 'name' => 'bob', 'style' => 'big', 'age' => 33, 'whim' => 'no'],
    // ... (other rows from $arr1)
];

$arr2 = [14, 72, 8790];

$resultingArray = array_uintersect($arr1, $arr2, $customCallback);</code>

$resultingArray에는 ID 값이 $arr2의 값과 일치하는 $arr1의 행이 포함됩니다.

위 내용은 평면 배열의 값을 일치시켜 배열 행을 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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