You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP将文件中的条目列表拆分为指定大小的批次?

解决PHP按指定批次拆分文件条目并分批次写入的问题

哈哈,这种看似基础但实操起来容易卡壳的需求我太懂了!之前我也翻了不少PHP函数文档,才找到两种简洁好用的实现方式,分场景给你说说:

场景1:文件不大,一次性读取处理

如果你的文件条目数不算特别多(比如几千条),可以直接把所有内容读到数组里,用array_chunk()函数一键拆分批次,代码非常清爽:

// 读取所有行,自动跳过空行并去除换行符
$allItems = file('items.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// 按每100条为一批拆分数组
$batches = array_chunk($allItems, 100);

// 遍历每一批完成写入操作
foreach ($batches as $index => $batch) {
    $batchFileName = "batch_" . ($index + 1) . ".txt";
    // 把批次内的条目用换行符拼接后写入文件
    file_put_contents($batchFileName, implode(PHP_EOL, $batch) . PHP_EOL);
    echo "已生成批次文件:{$batchFileName},包含" . count($batch) . "条条目\n";
}

场景2:大文件,逐行读取避免内存溢出

如果你的文件有几万甚至几十万条,一次性加载到内存会占用大量资源,甚至触发内存限制。这种情况下推荐逐行读取,累积到指定数量就处理一批:

$batchSize = 100; // 每批次的条目数
$currentBatch = [];
$batchNumber = 0;

// 打开文件句柄
$fileHandle = fopen('items.txt', 'r');
if (!$fileHandle) {
    die("无法打开文件items.txt,请检查文件路径和权限!");
}

// 逐行读取处理
while (($line = fgets($fileHandle)) !== false) {
    $cleanLine = trim($line);
    // 跳过空行
    if (empty($cleanLine)) continue;
    
    $currentBatch[] = $cleanLine;
    
    // 当当前批次达到指定大小,执行写入
    if (count($currentBatch) === $batchSize) {
        $batchNumber++;
        $outputFileName = "batch_{$batchNumber}.txt";
        file_put_contents($outputFileName, implode(PHP_EOL, $currentBatch) . PHP_EOL);
        echo "批次{$batchNumber}已写入完成\n";
        // 清空当前批次,准备下一批
        $currentBatch = [];
    }
}

// 处理最后一批不足指定大小的剩余条目
if (!empty($currentBatch)) {
    $batchNumber++;
    $outputFileName = "batch_{$batchNumber}.txt";
    file_put_contents($outputFileName, implode(PHP_EOL, $currentBatch) . PHP_EOL);
    echo "最后一批(剩余" . count($currentBatch) . "条)已写入完成\n";
}

// 关闭文件句柄
fclose($fileHandle);

小提示

  • FILE_IGNORE_NEW_LINES和FILE_SKIP_EMPTY_LINES是file()函数的实用参数,能帮你自动处理换行符和空行,省去额外的字符串处理。
  • 大文件场景一定要用逐行读取的方式,避免内存溢出问题,PHP默认的内存限制一般是128M,几万条文本很容易就占满了。

内容的提问来源于stack exchange,提问作者nibb11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:37:01