현재 위치: > 최신 기사 목록> 키 이름 비교 함수를 사용자 정의하고 array_intersect_ukey에 적용하는 방법? 기술 공유

키 이름 비교 함수를 사용자 정의하고 array_intersect_ukey에 적용하는 방법? 기술 공유

gitbox 2025-06-24

PHP에서는 종종 다양한 배열 기능을 사용하여 데이터, 특히 Array_intersect_ukey ()를 처리하는데, 이는 두 개 이상의 배열의 주요 이름과 동일한 키 이름을 가진 리턴 요소를 비교하는 데 사용됩니다. 이 기능은 사용하기에 매우 편리하지만 키 이름이 동일한 지 여부를 결정하기 위해 사용자 정의 비교 방법을 사용하려면 array_intersect_ukey () 함수가 다소 제한됩니다. 따라서 키 이름 비교 함수를 사용자 정의하고 array_intersect_ukey () 에 적용하는 방법을 마스터하면 배열 처리 기능이 크게 향상됩니다.

1. array_intersect_ukey () 의 기본 사용법

우선, array_intersect_ukey () 의 기본 사용을 이해하는 것이 매우 중요합니다. 이 함수의 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</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">callable</span></span><span> </span><span><span class="hljs-variable">$key_compare_func</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1$ array2 : 비교할 두 개의 배열.

  • $ key_compare_func : 두 개의 키 이름을 비교하는 콜백 함수. 반환 값이 0보다 작은 경우 첫 번째 키는 두 번째 키보다 작습니다. 반환 값이 0보다 크면 첫 번째 키는 두 번째 키보다 큽니다. 0이 반환되면 두 키는 동일합니다.

예를 들어, 다음 코드는 array_intersect_ukey () 의 일반적인 사용을 보여줍니다.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </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_intersect_ukey</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">'strcasecmp'</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>
(
    [b] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [c] =&gt; </span><span><span class="hljs-number">3</span></span><span>
)
</span></span>

이 예에서 STRCASECMP는 콜백 함수로 사용되며, 이는 키 이름의 케이스 비교를 무시하고 결국 두 배열에서 동일한 키 이름의 요소를 반환합니다.

2. 사용자 정의 키 이름 비교 함수

실제 응용 분야에서는 종종 필요에 따라보다 복잡한 비교 기능을 설계해야합니다. PHP를 사용하면 사용자 정의 비교 함수를 전달하여 비교 로직을 잘 제어 할 수 있습니다.

예를 들어, 문자 케이스뿐만 아니라 특수 문자의 우선 순위를 고려하여 배열의 키 이름을 비교하려면 다음을 달성하기 위해 기능을 사용자 정의 할 수 있습니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">custom_key_compare</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>) {
    </span><span><span class="hljs-comment">// 사용자 정의 비교 로직:키 이름에 특수 문자가 포함 된 경우,우선 순위가 높습니다</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key2</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;  </span><span><span class="hljs-comment">// $key1 우선 사항</span></span><span>
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key2</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">1</span></span><span>;   </span><span><span class="hljs-comment">// $key2 우선 사항</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-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>);
}
</span></span>

이 예에서는 custom_key_compare () 함수는 먼저 키 이름에 @ 기호가 포함되어 있는지 여부를 결정합니다. 한 사람이 포함하고 다른 하나가 포함되지 않으면 @를 포함하는 키 이름이 우선합니다. 그렇지 않으면 알파벳순으로 비교됩니다.

3. array_intersect_ukey () 에 사용자 정의 비교 함수 적용

다음으로 Key Name 비교를 수행하기 위해 Custom_Key_Compare () 함수를 Array_Intersect_ukey () 에 적용 할 수 있습니다. 다음 두 배열이 있다고 가정합니다.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b@'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">6</span></span><span>, </span><span><span class="hljs-string">'b@'</span></span><span> =&gt; </span><span><span class="hljs-number">7</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</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">'custom_key_compare'</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>
(
    [b@] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

보시다시피, Array_Intersect_ukey ()는 사용자 정의 된 키 이름 비교 함수에 따라 키 이름 B@를 성공적으로 인식하면서 배열에서 동일한 값이 있더라도 B를 무시합니다.

4. 실제 적용

키 이름 비교 함수를 사용자 정의함으로써 많은 복잡한 시나리오를 유연하게 처리 할 수 ​​있습니다. 예를 들어, 파일 경로에서 작업 할 때 케이스를 무시하거나 일부 경로에서 슬래시 방향 (전방 슬래시 / 및 백 슬래시 \ )을 일부 형식으로 통합하려면 array_intersect_ukey ()를 사용자 정의 규칙에 따라 쉽게 비교할 수 있습니다.

다음 파일 경로 배열이 있다고 가정합니다.

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'src/main.php'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'src/config/config.php'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'SRC/main.php'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'src/config/config.php'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];
</span></span>

우리는 사건을 무시하고 경로에서 슬래시 방향을 통합하고 싶습니다. 비교 함수를 다음과 같이 사용자 정의 할 수 있습니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">path_compare</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>) {
    </span><span><span class="hljs-comment">// 경로를 전달하여 슬래시를 전달하고 케이스를 무시하십시오</span></span><span>
    </span><span><span class="hljs-variable">$key1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">'\\'</span></span><span>, </span><span><span class="hljs-string">'/'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>));
    </span><span><span class="hljs-variable">$key2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">'\\'</span></span><span>, </span><span><span class="hljs-string">'/'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$key2</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">$key1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>);
}

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</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">'path_compare'</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>
(
    [src/config/config.php] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

맞춤형 비교 함수를 통해 경로 케이스와 슬래시 방향의 차이를 성공적으로 무시하고 올바른 결과를 얻었습니다.

5. 요약

PHP는 사용자 정의 키 이름 비교 함수와 결합 된 Array_intersect_ukey () 함수를 통해 배열에서 키 이름을 비교하는 유연하고 효율적인 방법을 제공합니다. 간단한 알파벳 비교 또는 복잡한 특별 규칙 판단이든, 맞춤형 비교 기능을 통해 달성 할 수 있습니다. 이를 통해 복잡한 데이터를 처리 할 때 강력한 도구를 제공하여 배열 작업의 동작을보다 정확하게 제어 할 수 있습니다.