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

PHP array_diff() 計算陣列差集:僅比較值、保留鍵名與多陣列排除

     編輯:PHP 相關知識

函式簽名

array_diff(array $array, array ...$arrays): array
  • 回傳**第一個陣列**中**不存在於任何其他陣列**的值
  • **僅比較值** (鬆散 `==`),忽略鍵名
  • **保留第一個陣列原鍵名**
  • 多陣列時:依序排除,最終保留第一個陣列中未被後續任一陣列包含的值

基本範例

<?php
$arr1 = ['a' => 'red', 'b' => 'green', 'c' => 'blue', 'd' => 'yellow'];
$arr2 = ['e' => 'red', 'f' => 'purple', 'g' => 'blue'];

$result = array_diff($arr1, $arr2);
print_r($result);
/*
Array
(
    [b] => green   // 只在 arr1
    [d] => yellow  // 只在 arr1
)
// red、blue 存在於 arr2 被排除
*/

多陣列排除


$all = ['a', 'b', 'c', 'd', 'e'];
$remove1 = ['b', 'c'];
$remove2 = ['d'];

$left = array_diff($all, $remove1, $remove2);
// ['a', 'e']  (鍵名保留: 0=>'a', 4=>'e')

實戰:權限過濾、排除黑名單


$userPerms = ['read', 'write', 'delete', 'admin', 'config'];
$roleDeny  = ['delete', 'admin'];      // 角色禁止
$tempDeny  = ['config'];               // 臨時封鎖

$allowed = array_diff($userPerms, $roleDeny, $tempDeny);
// ['read', 'write']

陷阱:值型別鬆散比較導致非預期排除


$arr1 = [0 => '0', 1 => '1', 2 => '2'];
$arr2 = [0 => 0, 1 => 1]; // 整數

var_dump(array_diff($arr1, $arr2));
// []  ← '0' == 0 為 true,'1' == 1 為 true,全被排除!
// 解決: 改用 array_udiff 配合嚴格比較
$strict = array_udiff($arr1, $arr2, fn($a,$b) => $a === $b ? 0 : 1);
// ['0', '1', '2'] 保留字串

相關變體快查

函式比較依據鍵名處理
`array_diff`值 (鬆散)保留第一個陣列鍵名
`array_diff_assoc`鍵+值 (鬆散)保留
`array_diff_key`鍵名保留
`array_udiff`自訂回呼比較值保留
`array_udiff_assoc`自訂回呼比較鍵+值保留
`array_udiff_uassoc`自訂鍵比較 + 自訂值比較保留

原文摘自 zuodefeng 筆記

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