Метод takeWhile у Laravel надає точний контроль над фільтрацією колекцій, дозволяючи витягувати елементи, які послідовно відповідають умові, до першого збою
$numbers = collect([1, 2, 3, 4, 2, 1]);
$ascending = $numbers->takeWhile(function ($number, $key) use ($numbers) {
if ($key === 0) return true;
return $number > $numbers[$key - 1];
});
// Результат: [1, 2, 3, 4]
Розглянемо практичний приклад управління системою обробки замовлень зі статусами
<?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(function (OrderStatus $status) {
return $status->successful;
})
->map(function (OrderStatus $status) {
return [
'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(function ($step) use ($requiredOrder, &$currentStep) {
return $step['type'] === $requiredOrder[$currentStep++] ?? null;
})->count() === count($requiredOrder);
}
}
Метод takeWhile пропонує потужний інструмент для роботи з послідовними даними, що ідеально підходить для обробки статусів, валідації послідовностей або аналізу тенденцій у ваших даних