Theme
Primary Color

معالجة البيانات عند الحاجة بإستخدام LazyCollection

ال LazyCollection بتقدر تنتج العناصر بالتدريج بدل تجهيز كل العناصر في الذاكرة

إنتاج قيم من Generator

ال take بتطلب الجزء المطلوب من المصدر

<?php

use Illuminate\Support\LazyCollection;

$items = LazyCollection::make(function () {
    for ($number = 1; $number <= 100; $number++) {
        yield $number;
    }
});
echo $items->take(3)->values()->toJson();

النتيجة

[1,2,3]

إضافة تحويل قبل أخذ النتيجة

ال map هنا بتتحسب وقت إستهلاك العناصر

<?php

use Illuminate\Support\LazyCollection;

$items = LazyCollection::make(function () {
    yield 2;
    yield 4;
    yield 6;
});
echo $items->map(fn ($number) => $number * 10)->take(2)->values()->toJson();

النتيجة

[20,40]
ملحوظة

تحويل مصفوفة ضخمة موجودة بالفعل إلى LazyCollection مش بيلغي الذاكرة اللي إستهلكتها المصفوفة

laravel شرح