在日常PHP 開發中,我們經常需要對比兩個數組的差異,尤其是當這些數組是由JSON 數據解析而來時。 array_diff()函數可以幫我們找出第一個數組中存在但第二個數組中不存在的元素。本文將介紹如何在處理JSON 數據時,正確使用array_diff() 。
PHP 的array_diff()函數用於比較兩個或多個數組,並返回存在於第一個數組但不在其他數組中的值:
$array1 = ["a", "b", "c", "d"];
$array2 = ["b", "d"];
$result = array_diff($array1, $array2);
print_r($result);
// 輸出:Array ( [0] => a [2] => c )
通常我們會從API 或外部文件中獲取JSON 格式的數據,使用json_decode()將其轉換為數組,再使用array_diff()進行比較。
$json1 = '["apple", "banana", "cherry", "date"]';
$json2 = '["banana", "date", "fig"]';
// 解碼成數組
$array1 = json_decode($json1, true);
$array2 = json_decode($json2, true);
// 比較差異
$diff = array_diff($array1, $array2);
print_r($diff);
// 輸出:Array ( [0] => apple [2] => cherry )
保持數據結構一致: json_decode()默認返回對象,需要設置第二個參數為true才能得到關聯數組或索引數組。
鍵名不影響結果: array_diff()只比較值,不考慮鍵名。
數據類型要一致:如果一個數組是整數,另一個是字符串形式的數字(如"1" vs 1 ),可能會導致比較不准確。可使用array_map()統一類型:
$array1 = array_map('strval', $array1);
$array2 = array_map('strval', $array2);
假設你正在同步兩個系統的數據,一個是遠程API 提供的JSON 數據,另一個是本地數據庫的記錄。你可以用如下方式找出需要新增的項目:
$remoteJson = file_get_contents('https://api.m66.net/data/items');
$remoteData = json_decode($remoteJson, true);
$localData = ["item_101", "item_102", "item_103"]; // 來自數據庫的 ID 列表
$newItems = array_diff($remoteData, $localData);
print_r($newItems);
// 輸出:遠程有而本地沒有的 item ID 列表
使用array_diff()結合json_decode()可以非常高效地對比JSON 數據的差異。在處理數據同步、數據校驗、數據變更提示等場景中都非常有用。記得在實際使用時注意數據結構與類型的統一,以免出現比較不准確的情況。
如果你正在開發類似的功能,推薦把這部分邏輯封裝成函數或服務類,提升代碼復用性和可維護性。