Home > Backend Development > PHP Tutorial > Generating Sequential Laravel Collections

Generating Sequential Laravel Collections

Johnathan Smith
Release: 2025-03-06 01:02:12
Original
455 people have browsed it

Generating Sequential Laravel Collections

When you need to create a collection with a specific number of calculated elements, Laravel's times method provides an elegant solution. This method is particularly useful for generating sequences, time slots, pagination links, or any scenario requiring numbered iterations.

<!-- 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]
Copy after login

Let's explore a practical example of a meeting scheduler that generates available time slots:

<!-- 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;
    }
}
Copy after login

The times method simplifies the process of generating sequential data, providing a clean and efficient way to create collections with calculated values.

The above is the detailed content of Generating Sequential Laravel Collections. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template