ユアスク by みんなシステムズ

MENU

【実例あり】Laravelのコレクションと連想配列の違いについて

2023/04/07

PHPを一通り勉強してLaravelに移行する時、はじめに戸惑うのはLaravelのコレクションではないでしょうか?(自分はそうでした)

この記事ではLaravelをこれから学ぶ人向けにコレクションと連想配列の違いを解説しようと思います!

コレクションとは?

以下Laravelの日本語ドキュメントから抜粋

Illuminate\Support\Collectionクラスは配列データを操作するための、書きやすく使いやすいラッパーです
Laravel9.xコレクション

つまり、「連想配列を拡張して使いやすくしたもの」といういうイメージです。変数の型で言うと、連想配列は配列型であり、コレクションはコレクションクラス型になっています

また、大きく違うのは連想配列を操作するにPHPの組み込み関数(array_map、array_filterなど)を使用するのに対して、コレクションはmap、filter、reduce、pluck、groupByなどのメソッドが標準で準備されており、コードがより読みやすく、簡潔になるのが特徴です。言葉だけだとイメージしづらいと思うので次に例を挙げます

例)配列の中の数値合計を計算する場合

連想配列の例

まず、連想配列でデータを操作する場合です。以下の例はageの合計を計算しています。PHPの組み込み関数array_reduceを使用して、ユーザーの年齢の合計を計算しています。

$usersArray = [
    ['name' => 'John', 'age' => 28],
    ['name' => 'Jane', 'age' => 32],
];

$ageSum = array_reduce($usersArray, function ($carry, $user) {
    return $carry + $user['age'];
}, 0);

echo $ageSum; // 60

コレクションの例

次に、Laravelのコレクションを使用する場合です。この場合、まず連想配列をコレクションに変換し、コレクションのsumメソッドを使用して年齢の合計を計算します。sumメソッドは、引数にキー(この場合は'age')を取り、そのキーに関連する値の合計を返します。

use Illuminate\Support\Collection;

$usersArray = [
    ['name' => 'John', 'age' => 28],
    ['name' => 'Jane', 'age' => 32],
];

$usersCollection = new Collection($usersArray);

$ageSum = $usersCollection->sum('age');

echo $ageSum; // 60

まとめ

この例からわかるように、Laravelのコレクションは、データ操作のための便利なメソッドを提供し、コードが簡潔で読みやすくなります。

一方、連想配列はPHPの基本的なデータ構造で、組み込み関数を使用してデータを操作します。

どちらを使用するかは、プロジェクトの要件や開発者の好みによりますが、せっかくLaravelを勉強するのであれば、コレクションを勉強するのはいかがでしょうか?