- カテゴリ: helper
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN / コマンド:
global function last(Illuminate\Support\Arr::lastのエイリアス) - 関連: head / Illuminate\Support\Arr::last / Collection::last / PHP end
- 変更履歴: Laravel 6 以降も利用可。
Arr::lastと同等仕様。
要点(TL;DR)
- 配列の最後の要素、または条件を満たす最後の要素を返す
last($array, $callback, $default)- 罠:配列以外は
TypeError、空配列や不一致はnull(既定)を返すので既定値を渡す
概要
last は配列の末尾要素を取得するヘルパ。コールバックを渡すと「条件を満たす最後の要素」を返せます。空配列や一致なしの場合は既定値(省略時は null)を返します。内部ポインタを動かさないため、end() より副作用が少なく安全です。
構文 / シグネチャ
function last(array $array, ?callable $callback = null, mixed $default = null): mixed
- 引数(表) 引数 型 必須 既定値 説明
$arrayarray ✅ — 走査対象の配列$callbackcallable(null|callable) nullfn($value, $key): boolで合致判定$defaultmixed null 一致なし・空配列時に返す値 - 戻り値:
mixed(最後の要素、または合致要素/なければ$default) - 例外/副作用:
array以外を渡すとTypeError。内部ポインタ変更なし(end()と違い副作用なし)。
使用例
最小例
$last = last([1, 2, 3]); // 3
$even = last([1, 2, 3, 4], fn($v)=>$v % 2 === 0); // 4
$none = last([1, 2, 3], fn($v)=>$v > 10, 'N/A'); // 'N/A'
実務例
// APIログ(配列)から「最後のエラーイベント」を取得
$events = [
['type' => 'info', 'id' => 1],
['type' => 'error', 'id' => 2],
['type' => 'info', 'id' => 3],
['type' => 'error', 'id' => 4],
];
$lastError = last($events, fn($e) => ($e['type'] ?? null) === 'error', null);
if ($lastError !== null) {
// 直近エラーのIDで再試行など
// retryJob($lastError['id']);
}
// Eloquent の JSON カラムや外部API結果を配列で受け取り、ガード付きで利用
try {
$items = $order->items; // 配列想定(cast: array 推奨)
$lastPaid = last($items, fn($i)=>($i['status'] ?? '') === 'paid', null);
} catch (TypeError $e) {
// items が配列でない場合のフォールバック
$items = is_array($order->items) ? $order->items : [];
$lastPaid = last($items, fn($i)=>($i['status'] ?? '') === 'paid', null);
}
よくある落とし穴・注意
- 配列必須:コレクションは
->all()で配列化、またはCollection::last()を使用。 nullと不一致の区別:空配列や不一致はnullになり紛らわしい。必要なら$defaultを明示。- キーは返らない:戻りは値のみ。該当キーが必要なら自前で走査する。
- 計算量:コールバックなしはほぼ O(1)、ありは最悪 O(n)。
代替・関連APIとの比較
Illuminate\Support\Arr::last:同等機能。静的呼び出しを好む場合に。Collection::last($callback = null, $default = null):配列化不要でチェーン可、遅延列挙系とも相性良。- PHP
end($array):内部ポインタを動かす副作用あり。条件指定不可。 - PHP
array_key_last($array):末尾キー取得のみ。条件指定不可。
選定基準:
- コレクション連鎖中 →
Collection::last - 配列をそのまま扱う/副作用なし →
last - 静的ユーティリティで統一 →
Arr::last
テスト例(Pest)
it('returns the last matching element', function () {
$v = last([1,2,3,4], fn($n)=>$n % 2 === 0);
expect($v)->toBe(4);
$v2 = last([], null, 'fallback');
expect($v2)->toBe('fallback');
});
トラブルシュート(エラー別)
| 症状/エラー | 原因 | 対処 |
|---|---|---|
TypeError: last(): Argument #1 ($array) must be of type array | 配列以外を渡している | 配列へキャスト、->all() で配列化、または Collection::last() を使用 |
null が返る | 空配列/不一致 | 第3引数に既定値を渡す。例:last($a, $cb, 'N/A') |
| 該当要素のキーも欲しい | last は値のみ | 逆走査で自前判定(for ($i=count($a)-1; $i>=0; $i--))や Collection でキー同定 |
ヘルパー特記事項(helperカテゴリ)
- フレームワーク依存/純PHP代替:Laravel ヘルパ。代替は
end()(副作用あり)や手動走査。 - コンテナ/グローバル状態:依存なし・副作用なし。
- ネスト/ワイルドカード:適用外(キー探索が必要なら
data_get等と併用)。
参考リンク
- Laravel Docs — Helpers: last()
- Laravel API — Illuminate\Support\Arr::last
- PHP Manual —
end() - PHP Manual —
array_key_last()

