在PHP 中, array_column是一個非常有用的函數,尤其是在處理多維數組時。它可以從一個二維數組中提取某一列的值,返回一個新數組。然而,當你在不同類型的數組(例如數字索引數組和關聯數組)上使用array_column時,可能會發現它們表現不完全相同。那麼,為什麼會有這種差異呢?
數字索引數組是最基礎的數組類型之一,每個元素都有一個遞增的索引(例如0, 1, 2 等)。在PHP 中,數字索引數組一般是順序排列的。
$array = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Jerry'],
['id' => 3, 'name' => 'Spike']
];
$names = array_column($array, 'name');
print_r($names);
輸出:
Array
(
[0] => Tom
[1] => Jerry
[2] => Spike
)
在上述示例中, array_column提取了數組中每個元素的name鍵對應的值,返回了一個數字索引數組。因為原始數組是關聯數組, array_column處理時會將值按照順序提取。
與數字索引數組不同,關聯數組的每個元素都有一個指定的鍵,而不是默認的數字索引。當你對關聯數組使用array_column時,表現會有所不同。
$array = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Jerry'],
['id' => 3, 'name' => 'Spike']
];
$names = array_column($array, 'name', 'id');
print_r($names);
輸出:
Array
(
[1] => Tom
[2] => Jerry
[3] => Spike
)
在這個例子中,除了提取name列的值外, array_column還使用id列的值作為新數組的鍵。因此,返回的是一個關聯數組,其鍵來自原始數組的id值。
數字索引數組:
array_column在數字索引數組上工作時,會根據原數組的順序生成一個新的索引數組。每個新數組的鍵是自動生成的,從0 開始遞增。
關聯數組:
當原數組是關聯數組時, array_column會保持原數組的鍵,或者如果指定了一個不同的鍵(如上面的id ),則會使用這個指定的鍵作為新數組的鍵。
指定索引:
array_column允許你指定一個數組列作為索引。這意味著你不僅可以提取特定列的值,還可以控制返回數組的鍵。這對於構建具有特定鍵值的數組非常有用,特別是當你需要按特定字段對數據進行索引時。
array_column在數字索引數組和關聯數組中的行為有所不同,主要體現在返回的數組鍵值上。對於數字索引數組,它會默認使用數字索引;而對於關聯數組,它會保留原來的索引或使用你指定的索引列。理解這些差異,可以幫助你在實際開發中更好地使用這個函數,避免出現不符合預期的結果。