concat — 末尾に値を連結(キーは破棄)

collection
  • カテゴリ: collection
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンド: Illuminate\Support\Collection::concat
  • 関連: merge / union / push / prepend / values
  • 変更履歴: —

要点(TL;DR)

  • 配列や別のコレクションのを順に末尾へ連結し、新しいコレクションを返す(キーは捨てる)。
  • collect([1, 2])->concat(['a' => 3, 4])->all(); // [1, 2, 3, 4]
  • 罠:①連結側のキーは保持されない/②非破壊(元は変わらない)/③反復可能(iterable)以外はエラー

概要

concat は、与えた配列・コレクションのだけを取り出して末尾に連結します。返り値は新しいコレクションなので元のインスタンスは変化しません。キーを活かした結合や上書きが必要なら merge / union を選びます。

構文 / シグネチャ

use Illuminate\Support\Collection;

/**
 * 値を末尾に連結(キーは破棄)
 *
 * @param iterable<mixed>|\Illuminate\Support\Enumerable $source
 * @return \Illuminate\Support\Collection
 */
public function concat($source): Collection;

引数(表)

引数必須既定値説明
$sourceiterable | Enumerable末尾に連結するシーケンス。キーは無視して値のみを追加
  • 戻り値Collection(0 からの連番キーで再インデックスされた新しいコレクション)
  • 例外/副作用:元コレクションは変更しない。$source が反復不能だと実行時エラー(TypeError 等)になり得る。

使用例

最小例

<?php

use Illuminate\Support\Collection;

$base = collect(['x' => 'A', 'B']);       // 値: ['A', 'B']
$out  = $base->concat(['k' => 'C', 'D']); // 値: ['A', 'B', 'C', 'D']

var_dump($out->all()); // ['A', 'B', 'C', 'D']  キーは 0..3 に振り直し

実務例:検索結果に「推薦アイテム」を末尾追加

<?php

use Illuminate\Support\Collection;

$results = collect([
    ['id' => 10, 'title' => 'Laravel Tips'],
    ['id' => 11, 'title' => 'Eloquent Basics'],
]);

$recommended = [
    ['id' => 999, 'title' => '公式ドキュメントを読もう'],
];

$final = $results->concat($recommended);

// 一覧表示などで自然に末尾へ並べたい時に有効(キーを気にしないケース)
foreach ($final as $item) {
    echo $item['title'] . PHP_EOL;
}

コレクション特性・計算量

  • チェーン可:可
  • 破壊的/非破壊非破壊(新しい Collection を返す)
  • キー保持しない(追加側だけでなく、結果は 0..N に再インデックス)
  • LazyCollection:同名メソッドあり(両方 Lazy なら低メモリで連結可能)
  • 計算量:O(n + m)(n=元要素数、m=連結要素数)

入出力対応(小サンプル)

入力連結出力(->all()
['a'=>1, 2]['x'=>3, 4][1, 2, 3, 4]
[1]collect([2,3])[1, 2, 3]

よくある落とし穴・注意

  • キーが必要なら不適concat値のみを連結。キーを保つ・キーで上書きしたいなら merge / union を使う。
  • 元が変わらない$c->concat([...])$c を変更しない。元を更新したいなら $c = $c->concat([...])破壊的push / prepend を検討。
  • 大量データ:大きな配列同士の結合はメモリ消費に注意。LazyCollectionconcat でストリーム的に処理すると安全。

代替・関連APIとの比較

  • merge:キー付き配列をマージ。同一文字列キーは上書き、数値キーは末尾に追加し再インデックス。
  • union:キーの保持を優先し、既存キーは上書きしない。不足キーのみ追加。
  • push / prepend:単一値を末尾/先頭に破壊的に追加。
  • values:キーを捨てて 0..N に再インデックスmerge/union 後にキーを整理したい時に併用)。

テスト例(Pest)

<?php

use Illuminate\Support\Collection;

it('concats values and discards keys', function () {
    $out = collect(['a' => 1, 2])->concat(['x' => 3, 4]);
    expect($out->all())->toBe([1, 2, 3, 4]);
});

it('does not mutate original collection', function () {
    $base = collect([1]);
    $base->concat([2]);
    expect($base->all())->toBe([1]);
});

トラブルシュート(エラー別)

症状/エラー原因対処
TypeError(または foreach 警告)$source が配列・反復可能でないArr::wrap($x) などで配列化する/コレクションに変換して渡す
期待したキーが残らないconcat はキーを破棄する仕様merge / union + 必要なら values() を併用
元コレクションが変わらないconcat は非破壊代入で受ける:$c = $c->concat($more)/破壊的メソッドを使う

参考リンク

長野県・北アルプス地方在住のフリーランスWebプログラマー。
「落ち着くためのWeb開発」をテーマに、訪れる人が安心して使えるサービスづくりを心がけています。

LaravelやWordPressなどのWebアプリケーション開発を得意とし、技術面の安定性はもちろん、運用後も長く活用できる設計を大切にしています。
静かな山間の暮らしから生まれる視点で、シンプルかつ本質的な解決策をご提案します。

野鳥観察も趣味のひとつで、特にミソサザイ(Wren)に魅力を感じています。
小さな体に反して力強く上向きの尾羽、そして澄んだ鳴き声が遠くまで響く姿に、静かな存在感と芯の強さを感じます。
このサイト名「Laravel Wren」には、そんなミソサザイのように、小さくても確かな価値を届けたいという想いを込めています。

信頼できるパートナーとして、そして気軽に相談できる存在として、あなたのWebプロジェクトをサポートします。

Yudai Tsuyuzakiをフォローする