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]
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['start_time'] ?? '09:00'; $endTime = $config['end_time'] ?? '17:00'; $duration = $config['duration'] ?? 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; } }
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!