В PHP можно организовать обработку данных порциями разными способами, в зависимости от того, с чем именно мы работаем: с базой данных, файлами или массивами. Основные методы:
SQL-запрос с
LIMIT и OFFSET Чтение файла построчно (
fgets(), SplFileObject) Итерация по массиву с
array_chunk() Использование генераторов (
yield) 🟠Постраничная выборка в SQL (`LIMIT` + `OFFSET`)
При работе с базой данных мы можем загружать данные порциями с помощью
LIMIT и OFFSET$limit = 10; // Количество записей на страницу
$offset = 0; // Смещение (номер страницы * $limit)
$sql = "SELECT * FROM users ORDER BY id LIMIT $limit OFFSET $offset";
$result = $pdo->query($sql)->fetchAll();
Альтернативный вариант – постраничная выборка без
OFFSET $last_id = 0;
$sql = "SELECT * FROM users WHERE id > $last_id ORDER BY id LIMIT $limit";
🟠Чтение файла порциями (`fgets()`, `SplFileObject`)
При работе с большими файлами можно читать их построчно, а не загружать в память целиком.
fgets() – чтение построчно $handle = fopen("large_file.txt", "r");
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);SplFileObject – более удобный способ $file = new SplFileObject("large_file.txt");
while (!$file->eof()) {
echo $file->fgets();
}🟠Разделение массива на порции (`array_chunk()`)
Если у нас массив данных, можно разбить его на части
$data = range(1, 100);
$chunks = array_chunk($data, 10);
foreach ($chunks as $chunk) {
print_r($chunk); // Выведет массивы по 10 элементов
}
🟠Генераторы (`yield`) – ленивый способ
Генераторы позволяют возвращать элементы по одному, не загружая всё в память сразу.
function getData() {
for ($i = 1; $i <= 100; $i++) {
yield $i; // Возвращает по одному значению
}
}
foreach (getData() as $num) {
echo $num . "\n";
}Ставь 👍 и забирай 📚 Базу знаний