Home >Backend Development >PHP Tutorial >Extracting Sequential Data with Laravel's takeWhile
Laravel's takeWhile
method offers precise control over collection filtering. It extracts consecutive elements satisfying a given condition, stopping at the first element that fails the condition.
This example demonstrates extracting ascending numbers from a collection:
$numbers = collect([1, 2, 3, 4, 2, 1]); $ascending = $numbers->takeWhile(function ($number, $key) use ($numbers) { return $key === 0 || $number > $numbers[$key - 1]; }); // Result: [1, 2, 3, 4]
Here's a practical application: tracking order processing status.
<?php namespace App\Services; use App\Models\Order; use App\Models\OrderStatus; use Illuminate\Support\Collection; class OrderProcessingService { public function getSuccessfulSteps(Order $order): Collection { return $order->statusUpdates() ->oldest() ->get() ->takeWhile(fn (OrderStatus $status) => $status->successful) ->map(fn (OrderStatus $status) => [ 'step' => $status->step_name, 'completed_at' => $status->created_at->format('Y-m-d H:i:s'), 'processor' => $status->processor_name ]); } public function validateProcessingSequence(Collection $steps): bool { $requiredOrder = ['payment', 'inventory', 'packaging', 'shipping']; $currentStep = 0; return $steps->takeWhile(fn ($step) use ($requiredOrder, &$currentStep) => $step['type'] === ($requiredOrder[$currentStep++] ?? null))->count() === count($requiredOrder); } }
takeWhile
is ideal for handling sequential data, particularly useful for processing status updates, validating sequences, or analyzing data trends. The method provides a concise and efficient way to manage such scenarios.
The above is the detailed content of Extracting Sequential Data with Laravel's takeWhile. For more information, please follow other related articles on the PHP Chinese website!