Laravel 系列 - 3: Array 與 Collection

更新於 發佈於 閱讀時間約 1 分鐘

對許多初學者來說,「PHP 中的 Array」和「Laravel 中的 Collection」這兩者的差異可能不是那麼明顯。這篇文章將帶大家一探究竟,介紹這兩者的不同點,以及各自的優缺點。

Array

在 PHP 中,Array 是一種原生的資料結構,實際上它並不算是一個物件類型,而是一種儲存資料的方式,可以包含數字索引或關聯索引的元素。PHP 提供了許多內建的函數來操作 Array,像是 array_map()array_filter() 等等。

最主要的優點是,因為是 PHP 原生的功能,所以不論在哪個框架、甚至是純 PHP 程式都可以使用 Array。

Collection

在 Laravel 中,Collection 是一個強大的資料處理工具,它是基於 PHP Array 之上進行擴展的。Laravel 提供了許多便捷的 Collection 方法,像是 map()filter()reduce() 等等,可以幫助高效地處理資料,但缺點是一定得用 Laravel 框架。

兩者間的差異

除了前面提到的原生與框架依賴的差別,以下是 Array 與 Collection 之間的其他主要區別:

  • 本質不同
    Array 僅是一種基本的資料結構,通常用來儲存一組數據。而 Collection 則可以視為一個擁有方法的物件,並且支持封裝、繼承等物件導向特性,讓它在處理複雜資料時更具彈性與擴展性。
  • 方法連鎖(Method Chaining)
    由於 Array 是 PHP 的原生資料結構,它的操作方法是分開的,無法進行鏈式呼叫(Method Chaining),每次呼叫都需要依序處理。例如,操作 Array 時可能需要寫成:$result = array_filter(array_map(...));
    Collection 則可以鏈式呼叫多個方法,讓程式碼更加簡潔與易讀。例如,對一個 Collection 使用多個方法時,可以這樣寫:$collection->filter(...)->map(...)->sort(...);
    這樣的寫法讓程式碼更具可讀性,也更容易維護。
  • 高階方法
    Collection 提供了許多高階方法,這些方法使得程式碼更加簡潔並提升開發效率。例如,若需要取得資料集的第一筆資料,使用 Collection 可以直接寫:$firstItem = $collection->head();
    相對而言,對於原生的 Array,則需要更多的程式碼來實現相同的功能,可能要用 reset($array)array_slice($array, 0, 1) 來取出第一筆資料。
  • Eloquent 互動
    Collection 在 Laravel 中有與 Eloquent 查詢結果集成的特性。這意味著,從 Eloquent 查詢結果取得的資料就是一個 Collection,你可以直接在查詢結果上鏈式呼叫 Collection 方法來進行處理。例如:
    $users = User::where('active', 1)->get(); // 返回 Collection
    $names = $users->pluck('name');
    這種集成性使得操作查詢結果變得更加靈活且直觀。

整體來說,雖然 Collection 因為有許多高階方法讓使用上更方便,但其實使用後的效能不一定更好。在一些僅需要小數據的操作時,或許 Array 才是使用上比較好的選擇喔。

collect()的用法

Collection 本身可以直接帶入 Array 的資料進行建立。

$a = ['key' => 'value'];
$ac = collect($a); // 會建立 'key' => 'value' 的 Collection

此時,你需要確認帶入的 Array 是否為空,以及你想要什麼結果。

$b = [];
$bc1 = collect($a); // 返回一個空的 Collection,內部無元素,通過 isEmpty() 確認為 true
$bc2 = collect([$a]); //返回一個包含一個空数组的 Collection,内部有一個元素

同理,處理空類別的方式也是同樣的方式。

Class myClass {
public string $name;
public string $value;
}

$cc1 = collect(myClass::empty()); // 會解離每一個屬性包成 Array,不再擁有 myClass 這個類別
dump($cc1);
/*
....Illuminate\\Support\\Collection^ {
#items: array:6 [
"\\x00App\\myClass\\x00name" => ""
"\\x00App\\myClass\\x00email" => ""
"\\x00App\\ValueObjects\\Csr\\CsrEmployee\\x00value" => ""
]
#escapeWhenCastingToString: false
}
*/

$cc2 = collect([myClass::empty()]); // 保有 myClass 這個類別,直接視為一整個物件
dump($cc2);
/*
....Illuminate\\Support\\Collection^ {
#items: array:1 [
0 => App\\myClass^ {
-name: ""
-value: ""
}
]
#escapeWhenCastingToString: false
}
*/

由以上可以發現不同代入方式會取得不同的結果,要特別注意

用 map 去調整組成 Collection 的內容

有時候雖然 Array 中擁有所有必要的資訊,但直接塞入 Collection 並非最理想的結果,我們可能會希望先做些調整與計算再塞入 Collection ,此時就可以搭配 map 作使用。

舉例來說,如果我們想改變 Collection 內儲存的結構,可以作如下的調整:

$a = collect($rawData)
->map(
function (array $data) {
$b = $data['one'] + $data['two'];
$c = $data['msg'] ?? '';
return new OtherCalss(
$b,
$c,
Type::from($data['type']),
Carbon::parse($data['now']),
null,
collect(),
);
});


這次就介紹到這邊,我們下次再見!

留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
57內容數
test
林柏宇的沙龍的其他內容
2025/05/04
本文詳細介紹了 RabbitMQ 的基本概念、架構以及其在現代系統中的重要性。RabbitMQ 作為一套開源的訊息佇列服務,旨在有效管理通訊流,增強系統穩定性和擴展性。透過描述佇列、交換器及消費者等核心組件的功能,並探討其在微服務和事件驅動架構中的應用。
Thumbnail
2025/05/04
本文詳細介紹了 RabbitMQ 的基本概念、架構以及其在現代系統中的重要性。RabbitMQ 作為一套開源的訊息佇列服務,旨在有效管理通訊流,增強系統穩定性和擴展性。透過描述佇列、交換器及消費者等核心組件的功能,並探討其在微服務和事件驅動架構中的應用。
Thumbnail
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News