현재 위치: > 최신 기사 목록> Array_Udiff 함수에서 사용자 정의 비교 함수를 올바르게 작성하는 방법은 무엇입니까?

Array_Udiff 함수에서 사용자 정의 비교 함수를 올바르게 작성하는 방법은 무엇입니까?

gitbox 2025-08-05

1. array_udiff 함수의 개요

Array_Udiff 함수는 여러 배열 간의 차이를 계산하는 데 사용됩니다. Array_Diff 와의 차이점은 개발자가 요소를 비교하기 위해 사용자 정의 비교 함수를 제공 할 수 있다는 것입니다. 이 기능의 기본 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$value_compare_func</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1, $ array2, ... $ 배열 : 비교할 하나 이상의 배열.

  • $ value_compare_func : 두 배열 요소를 비교하는 콜백 함수. 이 함수는 정수 값을 반환하여 요소의 순서를 나타냅니다.

2. 사용자 정의 비교 기능에 대한 요구 사항

사용자 정의 비교 함수의 기능은 배열 요소 간의 비교 규칙을 정의하는 것입니다. 두 개의 매개 변수, 일반적으로 두 배열의 요소가 필요하며 반환 된 결과에 따라 순서를 결정합니다. 기능 비교는 다음 규칙을 따라야합니다.

  • 첫 번째 매개 변수가 두 번째 매개 변수보다 작 으면 음의 값이 반환됩니다.

  • 첫 번째 매개 변수가 두 번째 매개 변수와 같으면 0을 반환하십시오.

  • 첫 번째 매개 변수가 두 번째 매개 변수보다 크면 양수 값이 반환됩니다.

PHP는 사용자 정의 비교 함수의 리턴 값을 기반으로 결과 배열에서 유지되는 요소를 결정합니다.

3. 사용자 정의 비교 기능을 작성하십시오

사용자 정의 비교 함수의 구현은 비교적 간단합니다. 기본 사용자 정의 비교 기능 예는 다음과 같습니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_values</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span> === </span><span><span class="hljs-variable">$b</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 동일한</span></span><span>
    }
    </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span> &lt; </span><span><span class="hljs-variable">$b</span></span><span>) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// 반환 음수보다 적습니다,반환 양수보다 큽니다</span></span><span>
}
</span></span>

이 비교 함수는 숫자에 대한 것이며 문자열 또는 더 복잡한 데이터 유형을 비교하려면 실제 요구에 따라 수정해야 할 수도 있습니다.

4. array_udiff 에 사용자 정의 비교 함수를 사용하십시오

Array_udiff 에서는 사용자 정의 비교 기능을 사용하는 것이 매우 간단합니다. 마지막 매개 변수로 전달하십시오. 예를 들어, 두 배열의 차이점을 비교하십시오.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">"compare_values"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

보시다시피, 배열 $ array1$ array2 의 차이 요소는 12 이며 $ array2 가 아닙니다.

5. 여러 배열의 비교

Array_udiff는 두 배열을 비교할뿐만 아니라 여러 배열의 차이를 비교할 수 있습니다. 더 많은 배열을 전달하면 PHP가 주어진 순서로 하나씩 비교됩니다.

예를 들어, 세 배열의 차이점을 비교하십시오.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-variable">$array3</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-variable">$array3</span></span><span>, </span><span><span class="hljs-string">"compare_values"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

6. 문자열 또는 복잡한 데이터 유형 비교

문자열 또는 복잡한 데이터 구조를 비교 해야하는 경우 비교 함수도 그에 따라 조정해야합니다. 예를 들어, 두 줄의 크기를 비교할 때는 strcmp 함수를 사용할 수 있습니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_strings</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>);
}

</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">"compare_strings"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; apple
)
</span></span>

7. 클로저를 비교 함수로 사용하십시오

PHP에서 클로저 (익명 함수)도 일반적인 사용법이며 Array_udiff 의 비교 함수로 사용할 수 있습니다. 이렇게하면 이름이 지정된 함수를 별도로 정의 할 필요가 없습니다. 예를 들어, 다음 코드는 클로저를 사용하여 두 정수 배열의 차이점을 비교하는 방법을 보여줍니다.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$a</span></span><span> - </span><span><span class="hljs-variable">$b</span></span><span>; </span><span><span class="hljs-comment">// 숫자 크기의 간단한 비교</span></span><span>
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

8. 성능 최적화

Array_udiff 의 성능은 매우 큰 배열을 다룰 때 문제가 될 수 있습니다. Array_udiff는 요소별로 요소를 호출해야하기 때문에 성능 최적화가 특히 중요해집니다. 비교 함수를 작성할 때 불필요한 계산과 복잡한 논리를 피하고 비교 기능을 간결하고 효율적으로 유지하십시오.

결론적으로

Array_udiff 및 사용자 정의 비교 함수를 사용하면 여러 배열 간의 차이를 유연하게 계산할 수 있습니다. 핵심은 비교 함수의 작동 방식을 올바르게 이해하고 다른 데이터 유형에 따라 비교 규칙을 조정하는 것입니다. 숫자, 문자열 또는 복잡한 데이터 구조에 관계없이 사용자 정의 비교 기능은 개발자에게 더 높은 제어를 제공 할 수 있습니다. 이 기사의 설명을 통해 배열 차이를 처리하기 위해 PHP에서 Array_udiff 함수를 사용하는 방법을 더 잘 이해할 수 있기를 바랍니다.