首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP array_intersect_uassoc() 索引檢查交集並自訂鍵名比較:同時比對鍵與值

     編輯:PHP 相關知識

函式簽名

array_intersect_uassoc(array $array, array ...$arrays): array
// 最後一個參數為 callable $key_compare_func
  • 同時比較**鍵名**與**值** (鬆散比較值)
  • 鍵名比較使用**自訂回呼函式**
  • 值比較固定為鬆散 (`==`),不可自訂
  • 回傳**第一個陣列**中鍵值皆符合的元素,保留原鍵名

基本範例:不區分大小寫鍵名 + 值相同

<?php
$arr1 = ['Blue' => 6, 'Red' => 2, 'Green' => 3, 'Purple' => 4];
$arr2 = ['green' => 5, 'BLUE' => 6, 'Yellow' => 7, 'Cyan' => 8];

// strcasecmp 不分大小寫比較鍵名
$result = array_intersect_uassoc($arr1, $arr2, 'strcasecmp');

print_r($result);
/*
Array
(
    [Blue] => 6   // 鍵名 'Blue'=='BLUE' 且值 6==6
)
// Green 值 3!=5 故不包含
*/

對比:`array_intersect_assoc` (內建不分大小寫不可調)


$arr1 = ['Blue' => 6, 'Red' => 2];
$arr2 => ['blue' => 6, 'red' => 2];

var_dump(array_intersect_assoc($arr1, $arr2)); // [] 區分大小寫
var_dump(array_intersect_uassoc($arr1, $arr2, 'strcasecmp')); // 兩者皆符合

進階:多維陣列部分鍵路徑比較


$users1 = [
    'U001' => ['name' => 'Alice', 'role' => 'admin'],
    'U002' => ['name' => 'Bob',   'role' => 'user'],
];
$users2 = [
    'u001' => ['name' => 'Alice', 'role' => 'admin'],
    'u003' => ['name' => 'Charlie', 'role' => 'user'],
];

// 比較鍵名不分大小寫,值陣列需完全相同 (鬆散比較逐元素)
$cmp = fn($a, $b) => strcasecmp($a, $b);
$common = array_intersect_uassoc($users1, $users2, $cmp);
// ['U001' => ['name'=>'Alice','role'=>'admin']]

限制與替代方案

需求可行方案
自訂「值」比較邏輯 (如物件 ID 相等即同)`array_uintersect_assoc` (PHP 5+)
同時自訂鍵與值比較`array_uintersect_uassoc` (PHP 5+)
嚴格型別比較 (`===`)自行迴圈或 `array_filter` + `array_intersect_key`

原文摘自 zuodefeng 筆記

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved