[扩展推荐] PHP 7 stream-parser 支持多格式的文件流解析器(超大文件 xml/JSON/CSV 读取解析的方案)

file

PHP 7 Stream Parser 是由 Sergio Ródenas 开发的扩展包,用于为 PHP 提供多格式文件流解析。使用 pull 解析器的流在大型文档中比 DOM 加载更加有效。

下面的示例展示了结合 Laravel 队列使用流式解析器:

StreamParser::xml("https://example.com/users.xml")->each(function(Collection $user){
    dispatch(new App\Jobs\SendEmail($user));
});

以下方的 XML 数据为例,流式解析器与「集合」协作得很好,结果非常清晰:

<bookstore>
    <book ISBN="10-000000-001">
        <title>The Iliad and The Odyssey</title>
        <price>12.95</price>
        <comments>
            <userComment rating="4">
                Best translation I've read.
            </userComment>
            <userComment rating="2">
                I like other versions better.
            </userComment>
        </comments>
    </book>
    [...]
</bookstore>

PHP的代码以及输出的例子:

StreamParser::xml("https://example.com/books.xml")->each(function(Collection $book){
    var_dump($book);
    var_dump($book->get('comments')->toArray());
});

// 输出
class Illuminate\Support\Collection#19 (1) {
  protected $items =>
  array(4) {
    'ISBN' =>
    string(13) "10-000000-001"
    'title' =>
    string(25) "The Iliad and The Odyssey"
    'price' =>
    string(5) "12.95"
    'comments' =>
    class Illuminate\Support\Collection#17 (1) {
      protected $items =>
      array(2) {
        ...
      }
    }
  }
}
array(2) {
  [0] =>
  array(2) {
    'rating' =>
    string(1) "4"
    'userComment' =>
    string(27) "Best translation I've read."
  }
  [1] =>
  array(2) {
    'rating' =>
    string(1) "2"
    'userComment' =>
    string(29) "I like other versions better."
  }
}

下面是使用 CSV 的使用示例:

title,price,comments
The Iliad and The Odyssey,12.95,"Best translation I've read.,I like other versions better."
Anthology of World Literature,24.95,"Needs more modern literature.,Excellent overview of world literature."

接下来是使用文件流解析器的代码和输出:

StreamParser::csv("https://example.com/books.csv")->each(function(Collection $book){
    var_dump($book->get('comments')->last());
});

// 输出
string(29) "I like other versions better."
string(39) "Excellent overview of world literature."

了解更多

你可以在 GitHub 上了解关于此安装包的更多信息,并且可以使用 composer require Rodenastyle/stream-parser 来进行安装使用。README 还提到了这篇文章,这里有关于 processing XML files via DOM vs. Streaming 的说明。


Practice makes perfect.

原文地址:https://laravel-news.com/php-7-multi-for...

译文地址:https://learnku.com/laravel/t/15006/exte...

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1
Summer

曾经处理过 1 G 多的一个 JSON 文件,不使用 stream-parser 的方案,基本上就是没法。

8个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会