ホームページ > バックエンド開発 > PHPチュートリアル > シーケンシャルLaravelコレクションの生成

シーケンシャルLaravelコレクションの生成

Johnathan Smith
リリース: 2025-03-06 01:02:12
オリジナル
454 人が閲覧しました

Generating Sequential Laravel Collections

特定の数の計算要素を使用してコレクションを作成する必要がある場合、Laravel's Timesメソッドはエレガントなソリューションを提供します。この方法は、シーケンス、時間スロット、ページネーションリンク、または番号付きの反復を必要とするシナリオを生成するのに特に役立ちます。

<!-- Syntax highlighted by torchlight.dev -->// Generate multiplication table of 5
$fives = Collection::times(10, function ($number) {
    return $number * 5;
});
// [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
ログイン後にコピー
利用可能な時間スロットを生成する会議スケジューラの実用的な例を探りましょう:

<!-- Syntax highlighted by torchlight.dev --><?php

namespace App\Services;

use Carbon\Carbon;
use Illuminate\Support\Collection;

class MeetingScheduler
{
    public function generateTimeSlots(Carbon $date, array $config = []): Collection
    {
        $startTime = $config[&#39;start_time&#39;] ?? &#39;09:00&#39;;
        $endTime = $config[&#39;end_time&#39;] ?? &#39;17:00&#39;;
        $duration = $config[&#39;duration&#39;] ?? 30;

        $slots = $this->calculateSlotCount($startTime, $endTime, $duration);
        return Collection::times($slots, function ($slot) use ($date, $startTime, $duration) {
            $start = Carbon::parse($date->format('Y-m-d') . ' ' . $startTime)
                ->addMinutes(($slot - 1) * $duration);

            $end = $start->copy()->addMinutes($duration);
            return [
                'id' => $slot,
                'start_time' => $start->format('H:i'),
                'end_time' => $end->format('H:i'),
                'formatted' => sprintf(
                    '%s - %s',
                    $start->format('g:i A'),
                    $end->format('g:i A')
                ),
                'is_available' => !$this->isSlotBooked($start, $end)
            ];
        });
    }

    private function calculateSlotCount($start, $end, $duration): int
    {
        $startMinutes = Carbon::parse($start)->diffInMinutes(Carbon::parse($end));
        return (int) floor($startMinutes / $duration);
    }

    private function isSlotBooked(Carbon $start, Carbon $end): bool
    {
        // Check against existing bookings
        return false;
    }
}
ログイン後にコピー
タイムメソッドは、順次データを生成するプロセスを簡素化し、計算値を持つコレクションを作成するためのクリーンで効率的な方法を提供します。

以上がシーケンシャルLaravelコレクションの生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート