當前位置: 首頁> 最新文章列表> array_intersect_ukey 和array_intersect_key 有什麼區別?詳細對比解析

array_intersect_ukey 和array_intersect_key 有什麼區別?詳細對比解析

gitbox 2025-06-25

1. array_intersect_key函數簡介

array_intersect_key函數用於比較多個數組的鍵名,返回所有鍵名都相同的元素。它不會比較數組的值,僅僅根據鍵名進行匹配。

函數定義:
 <span><span><span class="hljs-title function_ invoke__">array_intersect_key</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">array</span></span><span>
</span></span>
參數:
  • $array1 :第一個數組,用來與其它數組比較。

  • $array2 :第二個數組,包含要與$array1比較的鍵。

  • 額外的數組(可選):可以傳入多個數組進行多重比較。

返回值:

返回一個數組,包含所有與其它數組有相同鍵名的元素。

示例:
 <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">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">10</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>,
    </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>
];

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

在這個示例中, array_intersect_key比較了$array1$array2的鍵名,返回了鍵名相同的元素: 'a''b'

2. array_intersect_ukey函數簡介

array_intersect_key類似, 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><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
參數:
  • $array1 :第一個數組,用來與其它數組比較。

  • $array2 :第二個數組,包含要與$array1比較的鍵。

  • $key_compare_func :用戶自定義的回調函數,用於比較鍵名。該函數接收兩個鍵名作為參數,返回一個整數值:如果第一個鍵小於、等於或大於第二個鍵,分別返回負數、零或正數。

  • 額外的數組(可選):可以傳入多個數組進行多重比較。

返回值:

返回一個數組,包含所有滿足用戶自定義鍵名比較函數條件的元素。

示例:
 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'cherry'</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">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">10</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>,
    </span><span><span class="hljs-string">'date'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>
];

</span><span><span class="hljs-variable">$key_compare_func</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></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-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcasecmp</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-comment">// 忽略大小寫進行比較</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-variable">$key_compare_func</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>
(
    [apple] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [banana] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

在這個示例中, array_intersect_ukey使用了strcasecmp函數來比較鍵名,忽略了大小寫,因此'apple''banana'被認為是相同的鍵。

3. 主要區別對比

特性array_intersect_key array_intersect_ukey
比較方式直接比較鍵名允許通過用戶定義的回調函數自定義鍵名比較方式
用戶自定義比較不支持用戶自定義比較支持通過回調函數自定義比較規則
使用場景適用於簡單的鍵名比較,且不需要考慮大小寫或複雜的比較規則適用於需要復雜或自定義規則的鍵名比較
性能比較簡單,執行效率較高由於涉及用戶回調函數,性能可能稍遜於array_intersect_key

4. 總結

  • array_intersect_key是一個比較簡單且高效的函數,適用於在多個數組中比較鍵名,且不涉及鍵名的自定義比較。

  • array_intersect_ukey允許開發者提供自定義的鍵名比較函數,這使得它更靈活,適用於需要進行複雜鍵名比較的場景,但也可能會影響性能。

根據具體的應用需求,可以選擇適合的函數來處理鍵名比較。如果只需要直接的鍵名匹配, array_intersect_key就足夠了;如果需要更複雜的鍵名比較邏輯, array_intersect_ukey則提供了更強大的功能。