當前位置: 首頁> 最新文章列表> array_fill_keys 中鍵名重複時會發生什麼?

array_fill_keys 中鍵名重複時會發生什麼?

M66 2025-05-14

在PHP 中, array_fill_keys()是一個非常有用的函數,它用於創建一個新的數組,並將指定的鍵名填充為相同的值。這個函數的語法如下:

 array_fill_keys(array $keys, mixed $value): array
  • $keys :一個包含鍵名的數組。

  • $value :為每個鍵名指定的值。

1. 基本示例

假設我們有一個簡單的例子:

 $keys = ['a', 'b', 'c'];
$value = 1;

$result = array_fill_keys($keys, $value);
print_r($result);

輸出將會是:

 Array
(
    [a] => 1
    [b] => 1
    [c] => 1
)

這個例子很簡單, array_fill_keys()根據提供的鍵名a , b , c和指定的值1創建了一個新的數組。

2. 鍵名重複的情況

然而,問題在於,當傳遞給array_fill_keys()$keys數組中包含重複的鍵名時,函數會忽略這些重複的鍵名,只保留最後一個出現的鍵值對。

舉個例子,看看下面的代碼:

 $keys = ['a', 'b', 'a', 'c'];
$value = 1;

$result = array_fill_keys($keys, $value);
print_r($result);

你可能會期待結果包含重複的a鍵,但實際上它會如下所示:

 Array
(
    [a] => 1
    [b] => 1
    [c] => 1
)

在這個例子中,鍵名a被重複傳遞到array_fill_keys()中,但數組的結果只保留了一個a鍵,並且它的值是1 。這種行為是由於PHP 中數組的鍵名是唯一的,所以重複的鍵名會被忽略,只保留最後一次出現的鍵。

3. 為什麼會發生這種情況?

這種行為可以通過PHP 的數組的內部實現來解釋。在PHP 中,數組的鍵名是唯一的。當array_fill_keys()創建新數組時,它實際上是將每個鍵名與指定的值綁定在一起,如果有重複的鍵名,它只會保留最後一次出現的鍵名。這是為了避免數組中出現重複的鍵,因為PHP 的數組不允許相同的鍵名出現兩次。

4. 如何避免重複鍵名?

如果你希望避免這種問題,並確保在傳遞給array_fill_keys()$keys中不會有重複的鍵名,你可以先使用array_unique()來去除重複的鍵名:

 $keys = ['a', 'b', 'a', 'c'];
$value = 1;

$uniqueKeys = array_unique($keys);
$result = array_fill_keys($uniqueKeys, $value);
print_r($result);

輸出將會是:

 Array
(
    [a] => 1
    [b] => 1
    [c] => 1
)

這樣,我們就確保了只有唯一的鍵名被用於填充新數組。

5. 總結

array_fill_keys()是一個非常方便的函數,但如果傳遞的鍵名數組中包含重複的鍵名,它會忽略掉重複的部分,只保留最後一個出現的鍵值對。這種行為是PHP 數組設計的一部分,它確保了數組的鍵名唯一性。如果你需要處理重複鍵名的問題,可以通過array_unique()去除重複鍵,保證每個鍵名都是唯一的。

希望這篇文章能幫助你更好地理解array_fill_keys()函數及其在遇到重複鍵名時的行為。如果你還有其他問題,隨時可以提問!