count — 件数を返すメソッド
collection
- カテゴリ: collection
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN:
Illuminate\Support\Collection::count
- 関連:
sum / isEmpty / countBy / collect
- 変更履歴: なし(初期から存在)
要点(TL;DR)
- コレクション内の要素数を返す基本メソッド
collect($items)->count() の1行で使える
- 罠:
count(null) や空配列は 0 を返す/count() は遅延評価ではない(LazyCollection では注意)
概要
count はコレクション内の要素数を取得する最も基本的なメソッドです。
配列の count() と同じ用途ですが、コレクションチェーン内で扱える点が利点です。
統計処理や条件分岐、バリデーション前の件数把握など、実務で頻出します。
構文 / シグネチャ
public function count(): int
引数
戻り値
例外 / 副作用
- 例外なし
- LazyCollection では全件イテレーションが発生(性能注意)
使用例
最小例
<?php
use Illuminate\Support\Collection;
$numbers = collect([1, 2, 3]);
echo $numbers->count(); // 3
実務例(DBクエリ結果の件数確認)
<?php
use App\Models\User;
// 退会済ユーザーを除外して件数確認
$activeUsers = User::where('is_active', true)->get();
if ($activeUsers->count() > 1000) {
// 例えばバッチ処理を分割する判断など
logger('ユーザー数が多いため、処理を分割します。');
}
よくある落とし穴・注意
- LazyCollection の count() は全件読み込む
→ 大規模処理では ->count() ではなく SQL の ->count()(Eloquent builder)を使う
- コレクションが
null や空配列でも 0 を返す
→ null 判定は別途必要
- マルチディメンション配列でも トップ階層 の数のみカウント
代替・関連APIとの比較
| メソッド | 使いどころ |
|---|
count() | そのまま件数を取得 |
isEmpty() | 0 件かどうかだけ知りたい場合 |
countBy() | 値ごとの出現頻度を集計 |
sum() | 数値列の合計が欲しい場合 |
選定基準: 単純な件数 → count、値ごとの集計 → countBy。
テスト例(Pest)
it('counts collection items', function () {
$c = collect(['a', 'b', 'c']);
expect($c->count())->toBe(3);
});
トラブルシュート(エラー別)
| 症状/エラー | 原因 | 対処 |
|---|
| 件数が常に 0 | collect(null) が返された | null チェックを追加 |
| 処理が遅い | LazyCollection を全件走査している | DB の ->count() を使用する |
参考リンク