Maison >développement back-end >tutoriel php >Générer des collections séquentielles de laravel

Générer des collections séquentielles de laravel

Johnathan Smith
Johnathan Smithoriginal
2025-03-06 01:02:12460parcourir

Generating Sequential Laravel Collections

Lorsque vous devez créer une collection avec un nombre spécifique d'éléments calculés, la méthode Times de Laravel fournit une solution élégante. Cette méthode est particulièrement utile pour générer des séquences, des créneaux horaires, des liens de pagination ou tout scénario nécessitant des itérations numérotées.

<!-- 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]

Explorons un exemple pratique d'un planificateur de réunion qui génère des plages horaires disponibles:

<!-- 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;
    }
}

La méthode du Times simplifie le processus de génération de données séquentielles, fournissant un moyen propre et efficace de créer des collections avec des valeurs calculées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn