當前位置: 首頁> 最新文章列表> array_diff() 函數會保留原數組的鍵名嗎?還是說它會重新索引?

array_diff() 函數會保留原數組的鍵名嗎?還是說它會重新索引?

M66 2025-05-14

在PHP 的日常開發中, array_diff()函數常被用於對數組進行差集操作。它可以幫助我們找出在一個數組中存在、但在其他數組中不存在的值。這在處理數據過濾、權限控制等場景中非常實用。

不過一個經常被忽略的問題是: array_diff()返回結果時會保留原數組的鍵名嗎?還是說,它會自動重新索引數組?

一、 array_diff()的基本用法

先看一個簡單的例子:

 <?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["green", "yellow", "red"];

$result = array_diff($array1, $array2);

print_r($result);
?>

輸出結果為:

 Array
(
    [b] => brown
    [c] => blue
)

可以看到, array_diff()返回的結果保留了原數組$array1的鍵名。即便是字符串鍵,它也沒有被重新索引。

二、和array_values()對比一下

如果你確實想重新索引結果數組,可以手動使用array_values()

 $reindexed = array_values(array_diff($array1, $array2));
print_r($reindexed);

輸出:

 Array
(
    [0] => brown
    [1] => blue
)

這種情況下,鍵名被重置為從0開始的連續數字索引。

三、真實場景應用:過濾用戶提交的標籤

假設用戶提交了一組標籤,而你希望移除其中已經存在於系統默認標籤中的內容:

 <?php
$userTags = [
    10 => "php",
    11 => "html",
    12 => "custom"
];

$defaultTags = ["php", "html", "css", "javascript"];

$finalTags = array_diff($userTags, $defaultTags);

print_r($finalTags);
?>

輸出結果:

 Array
(
    [12] => custom
)

這表明函數確實保留了用戶原始數組的鍵名,這在數據庫插入或更新操作中可能是很有價值的信息。

四、注意事項

  • array_diff()只比較,不考慮鍵名。

  • 如果你希望基於鍵名進行比較,可以使用array_diff_key()

  • 如果要同時比較鍵名和值,可以使用array_diff_assoc()

五、擴展閱讀