定制 shimabox/smbarrayto 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

shimabox/smbarrayto

Composer 安装命令:

composer require shimabox/smbarrayto

包简介

Array to csv, tsv, ltsv, xml, json, ...

README 文档

README

License Build Status Maintainability Coverage Status Latest Stable Version Latest Unstable Version

Array to csv, tsv, ltsv, xml, json, ...

Overview

  • Array to csv, tsv, ltsv, xml, json, ...
  • And provides a download function, output function, write function

Requirements

Installation

composer require shimabox/smbarrayto

Basic Usage

In the case of csv download

  • It does not create the actual file
    • It makes use of the temporary file
  • Use the header function
<?php
require_once '/your/path/to/vendor/autoload.php';

use SMB\Arrayto;

$header = ['name', '名前', 'price'];

$rows = [
    ['apple', 'りんご', '1,000'],
    ['pineapple', 'パインアップル', '800']
];

// csv
$csv = Arrayto\Csv::factory();

// downloader object
$csvDownloader = $csv->getDownloader();

// download
$csvDownloader->setHeader($header) // optional
              ->setRows($rows) // set the rows
              ->download('example.csv');
exit;

or

<?php
require_once '/your/path/to/vendor/autoload.php';

use SMB\Arrayto;

$header = ['name', '名前', 'price'];

// csv
$csv = Arrayto\Csv::factory();

// downloader object
$csvDownloader = $csv->getDownloader();

// download
$csvDownloader->setHeader($header) // optional
              ->addRow(['apple', 'りんご', '1,000']) // add the row
              ->addRow(['pineapple', 'パインアップル', '800']) // add the row
              ->download('example.csv');
exit;

Result

name,名前,price
apple,りんご,"1,000"
pineapple,パインアップル,800
  • The default line feed code CRLF (only csv, tsv)
  • The default encoding SJIS-win (only csv, tsv)
  • Please perform the following if you want to change this
  • e.g.)
  // download
  $csvDownloader->setHeader($header)
                ->setRows($rows)
                ->setToConvert(false) // Not carried out the convert
                ->download('example.csv');
  exit;
  • Line feed code is LF
  • Encoding is UTF-8

Example

  • Use basically the following three interfaces
    • download($fileName);
      • It does not create the actual file (csv, tsv)
        • It makes use of the temporary file
      • Use the header function
    • output();
      • It does not create the actual file (csv, tsv)
        • It makes use of the temporary file
      • Use the header function
      • Simply echo()
    • write();
      • Need to specify the path where you want to save by setFileName()

In the case of CSV

download($fileName);

<?php
use SMB\Arrayto;

$csvHeader = ['name', '名前', 'price'];

$csvRows = [
    ['apple', 'りんご', '1,000'],
    ['pineapple', 'パインアップル', '800']
];

// csv
$csv = Arrayto\Csv::factory();

// downloader object
$csvDownloader = $csv->getDownloader();

// download
$csvDownloader->setHeader($csvHeader)
              ->setRows($csvRows)
              ->download('example.csv');
exit;

output();

<?php
use SMB\Arrayto;

// csv
$csv = Arrayto\Csv::factory();

// outputter object
$csvOutputter = $csv->getOutputter();

// output
$csvOutputter->setHeader($csvHeader)
             ->setRows($csvRows)
             ->output();
exit;

write();

<?php
use SMB\Arrayto;

// csv
$csv = Arrayto\Csv::factory();

// writer object
$csvWriter = $csv->getWriter();

// write
$csvWriter->setHeader($csvHeader)
          ->setRows($csvRows)
          ->setFileName('/path/to/your/example.csv') // specify the path
          ->write();

In the case of TSV

  • With csv interface
<?php
use SMB\Arrayto;

$header = ['name', '名前', 'price'];

$rows = [
    ['apple', 'りんご', '1,000'],
    ['pineapple', 'パインアップル', '800']
];

// tsv
$tsv = Arrayto\Tsv::factory();

// downloader object
$tsvDownloader = $tsv->getDownloader();

// outputter object
$tsvOutputter = $tsv->getOutputter();

// writer object
$tsvWriter = $tsv->getWriter();

CSV, TSV configuration

  • setHeader(array $header);
    • You can set the header row
  • clearHeader();
    • You can clear the header row
  • setToConvert($toConvert);
    • The default is true
      • Convert the line feed code to CRLF
      • To convert the encoding to SJIS-win
    • If you set the false, it does not perform the conversion

In the case of LTSV

download($fileName);

<?php
use SMB\Arrayto;

$obj = new \stdClass();
$obj->hoge = 123;
$obj->piyo = ['abc' => null, 'def' => false];

$ltsvRows = [
    'time' => "[2017-01-01 08:59:60]",
    'foo' => null,
    'bar' => true,
    'buz' => 0,
    'url' => 'http://example.net',
    'arr' => ['foo' => 'bar'],
    'obj' => $obj
];

// ltsv
$ltsv = Arrayto\Ltsv::factory();

// downloader object
$ltsvDownloader = $ltsv->getDownloader();

// download
$ltsvDownloader->setRows($ltsvRows)
               ->download('example.log');
exit;

Result

time:[2017-01-01 08:59:60]<TAB>foo:NULL<TAB>bar:true<TAB>buz:0<TAB>url:http://example.net<TAB>arr:{"foo":"bar"}<TAB>obj:[object] (stdClass: {"hoge":123,"piyo":{"abc":null,"def":false}})

output();

  • It does nothing

write();

<?php
use SMB\Arrayto;

// ltsv
$ltsv = Arrayto\Ltsv::factory();

// writer object
$ltsvWriter = $ltsv->getWriter();

// write
$ltsvWriter->setRows($ltsvRows)
           ->setFileName('/path/to/your/example.log') // specify the path
           ->write();

LTSV configuration

  • overrideEOL($EOL);
    • You can override the line feed code
    • The default line feed code is \n (LF)
    • e.g.)
    // write
    $ltsvWriter->setRows($ltsvRows)
               ->setFileName('/path/to/your/example.log')
               ->overrideEOL("\r\n") // CRLF
               ->write();

In the case of XML

download($fileName);

<?php
use SMB\Arrayto;

$xmlRows['book'] = [
    [
        '_attributes' => ['category' => 'children', 'currency' => 'USD'],
        'tilte' => [
            '_attributes' => ['lang' => 'en'],
            '_value' => 'Harry Potter'
        ],
        'author' => 'J K. Rowling',
        'year' => 2005,
        'price' => 29.99
    ],
    [
        '_attributes' => ['category' => 'music', 'currency' => 'JPY'],
        'tilte' => [
            '_attributes' => ['lang' => 'ja'],
            '_value' => '[score] Boys&Gilrs'
        ],
        'author' => 'GOING STEADY(銀杏BOYZ)',
        'year' => 2000,
        'price' => "2,808"
    ]
];

// xml
$xml = Arrayto\Xml::factory();

// downloader object
$xmlDownloader = $xml->getDownloader();

// download
$xmlDownloader->setRows($xmlRows)
              ->setRootElementName('bookstore') // optional
              ->download('example.xml');
exit;

Result

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="children" currency="USD">
    <tilte lang="en">Harry Potter</tilte>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="music" currency="JPY">
    <tilte lang="ja">[score] Boys&amp;Gilrs</tilte>
    <author>GOING STEADY(銀杏BOYZ)</author>
    <year>2000</year>
    <price>2,808</price>
  </book>
</bookstore>

output();

  • It does nothing

write();

<?php
use SMB\Arrayto;

// xml
$xml = Arrayto\Xml::factory();

// writer object
$xmlWriter = $xml->getWriter();

// write
$xmlWriter->setRows($xmlRows)
          ->setRootElementName('bookstore') // optional
          ->setFileName('/path/to/your/example.xml') // specify the path
          ->write();

XML configuration

  • setRootElementName($name);
    • You can set the root element name
    • Default of the root element name is the root
  • setReplaceSpacesByUnderScoresInKeyNames($bool);
    • Set to enable replacing space with underscore
    • The default is true
  • toFormatOutput($toFormatOutput);
    • Nicely formats output with indentation and extra space
    • The default is true
    • If you set the false, it does not format
    • e.g.)
      $xmlWriter->setRows($xmlRows)
                ->setRootElementName('bookstore') // optional
                ->setFileName('example.xml') // specify the path
                ->toFormatOutput(false) // it does not format
                ->write();
    Result
    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore><book category="children" currency="USD"><tilte lang="en">Harry Potter</tilte><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="music" currency="JPY"><tilte lang="ja">[score] Boys&amp;Gilrs</tilte><author>GOING STEADY(銀杏BOYZ)</author><year>2000</year><price>2,808</price></book></bookstore>

In the case of Json

download($fileName)

<?php
use SMB\Arrayto;

$obj = new \stdClass();
$obj->hoge = '123';
$obj->piyo = ['abc' => null, 'def' => false];

$jsonRows = [
    ['key1' => null, 'key2' => true, 'key3' => 0],
    ['url' => 'http://example.net'],
    ['arr' => ['foo' => 'bar']],
    ['obj' => $obj]
];

// json
$json = Arrayto\Json::factory();

// downloader object
$jsonDownloader = $json->getDownloader();

// download
$jsonDownloader->setRows($jsonRows)
               ->download('example.json');
exit;

Result

[
    {
        "key1": null,
        "key2": true,
        "key3": 0
    },
    {
        "url": "http://example.net"
    },
    {
        "arr": {
            "foo": "bar"
        }
    },
    {
        "obj": {
            "hoge": "123",
            "piyo": {
                "abc": null,
                "def": false
            }
        }
    }
]

output();

<?php
use SMB\Arrayto;

// json
$json = Arrayto\Json::factory();

// outputter object
$jsonOutputter = $json->getOutputter();

// output
$jsonOutputter->setRows($jsonRows)
              ->output();
exit;

write();

<?php
use SMB\Arrayto;

// json
$json = Arrayto\Json::factory();

// writer object
$jsonWriter = $json->getWriter();

// write
$jsonWriter->setRows($jsonRows)
           ->setFileName('/path/to/your/example.json') // specify the path
           ->write();

JSON configuration

  • setJsonEncodeOption($option);
    • You can override the json_encode options
    • The default is 448 (JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
    • e.g.)
      $jsonWriter->setRows($jsonRows)
                 ->setFileName('/path/to/your/example.json') // specify the path
                 ->setJsonEncodeOption(JSON_FORCE_OBJECT) // override
                 ->write();
    Result
      {"0":{"key1":null,"key2":true,"key3":0},"1":{"url":"http:\/\/example.net"},"2":{"arr":{"foo":"bar"}},"3":{"obj":{"hoge":"123","piyo":{"abc":null,"def":false}}}}

Other functions of the Downloader

  • downloadExistsFile($fileName, $aliasOfFileName = '');
    • Download an existing file
      <?php
      use SMB\Arrayto;
    
      // csv
      $csv = Arrayto\Csv::factory();
    
      // downloader object
      $csvDownloader = $csv->getDownloader();
    
      // download an existing file
      $csvDownloader->downloadExistsFile('/path/to/your/example.csv'); // file name is example.csv
    
      // or download an existing file as an alias
      $csvDownloader->downloadExistsFile('/path/to/your/example.csv', 'sample.csv'); // file name is sample.csv
    
      exit;
  • downloadExistsFileUsingWriter($fileName, Writable $writer);
    • Download an existing file using Writer
    • Download after the writing of the file
      <?php
      use SMB\Arrayto;
    
      $rows = [
          ['apple', 'りんご', '1,000'],
          ['pineapple', 'パインアップル', '800']
      ];
    
      // csv
      $csv = Arrayto\Csv::factory();
    
      // writer object
      $csvWriter = $csv->getWriter()
                       ->setRows($rows)
                       ->setFileName('/path/to/your/example.csv'); // specify the path
    
      // downloader object
      $csvDownloader = $csv->getDownloader();
    
      // download after the writing of the file
      $csvDownloader->downloadExistsFileUsingWriter('sample.csv', $csvWriter); // file name is sample.csv
    
      exit;

Configuration

@see SMB\Arrayto\Traits\Storable 

  • addRow($row);
    • Add the row
    use SMB\Arrayto;
    
    $obj = new \stdClass();
    $obj->hoge = '123';
    $obj->piyo = ['abc' => null, 'def' => false];
    
    // json
    $json = Arrayto\Json::factory();
    
    // write
    $json->getWriter()
         ->addRow(['key1' => null, 'key2' => true, 'key3' => 0])
         ->addRow(['url' => 'http://example.net'])
         ->addRow(['arr' => ['foo' => 'bar']])
         ->addRow(['obj' => $obj])
         ->setFileName('/path/to/your/example.json')
         ->write();
    Result
    [
        {
            "key1": null,
            "key2": true,
            "key3": 0
        },
        {
            "url": "http://example.net"
        },
        {
            "arr": {
                "foo": "bar"
            }
        },
        {
            "obj": {
                "hoge": "123",
                "piyo": {
                    "abc": null,
                    "def": false
                }
            }
        }
    ]
  • addRowBySpecifyingKV($key, $value);
    • To add a specified row keys and values
      <?php
      use SMB\Arrayto;
    
      $obj = new \stdClass();
      $obj->hoge = '123';
      $obj->piyo = ['abc' => null, 'def' => false];
    
      $obj2 = new \stdClass();
      $obj2->hoge = '456';
      $obj2->piyo = ['ghi' => null, 'jkl' => false];
    
      // json
      $json = Arrayto\Json::factory();
    
      // write
      $json->getWriter()
           ->addRowBySpecifyingKV('url', 'http://example.net')
           ->addRowBySpecifyingKV('url', 'http://example.org')
           ->addRowBySpecifyingKV('arr', ['foo' => 'bar'])
           ->addRowBySpecifyingKV('arr', ['baz' => 'fuga'])
           ->addRowBySpecifyingKV('obj', $obj)
           ->addRowBySpecifyingKV('obj', $obj2)
           ->setFileName('/path/to/your/example.json')
           ->write();
    Result
      {
          "url": [
              "http://example.net",
              "http://example.org"
          ],
          "arr": [
              {
                  "foo": "bar"
              },
              {
                  "baz": "fuga"
              }
          ],
          "obj": [
              {
                  "hoge": "123",
                  "piyo": {
                      "abc": null,
                      "def": false
                  }
              },
              {
                  "hoge": "456",
                  "piyo": {
                      "ghi": null,
                      "jkl": false
                  }
              }
          ]
      }
  • setAllowDuplicateKey($toAllow);
    • Whether set to allow duplicate keys
    • The default is true
      • csv,tsv behaves as false
    • If you set the false, it does not allow duplicate keys
    • e.g.)
      <?php
      use SMB\Arrayto;
    
      $obj = new \stdClass();
      $obj->hoge = '123';
      $obj->piyo = ['abc' => null, 'def' => false];
    
      $obj2 = new \stdClass();
      $obj2->hoge = '456';
      $obj2->piyo = ['ghi' => null, 'jkl' => false];
    
      // json
      $json = Arrayto\Json::factory();
    
      // write
      $json->getWriter()
           ->setAllowDuplicateKey(false) // it does not allow duplicate keys
           ->addRowBySpecifyingKV('url', 'http://example.net')
           ->addRowBySpecifyingKV('url', 'http://example.org')
           ->addRowBySpecifyingKV('arr', ['foo' => 'bar'])
           ->addRowBySpecifyingKV('arr', ['baz' => 'fuga'])
           ->addRowBySpecifyingKV('obj', $obj)
           ->addRowBySpecifyingKV('obj', $obj2)
           ->setFileName('/path/to/your/example.json')
           ->write();
    Result
      {
          "url": "http://example.org",
          "arr": {
              "baz": "fuga"
          },
          "obj": {
              "hoge": "456",
              "piyo": {
                  "ghi": null,
                  "jkl": false
              }
          }
      }

Configuration for write

@see SMB\Arrayto\Traits\File

  • setFileName($fileName);
    • Specify where to save the file path (is a required value)
    • '/path/to/your/example.csv' or '../example.csv' or 'example.csv' ...
  • setOpenMode($mode);
    • Specify the open mode of the file
    • The default open mode is w
    • PHP: fopen - Manual - A list of possible modes for fopen()
    • e.g.)
      <?php
      use SMB\Arrayto;
    
      $header = ['name', '名前', 'feature'];
    
      $rows1 = [
          ['apple', 'りんご', "Sweet\tRed"]
      ];
    
      // tsv
      $tsv = Arrayto\Tsv::factory();
    
      // writer object
      $tsvWriter = $tsv->getWriter();
    
      $tsvWriter->setHeader($header)
                ->setRows($rows1)
                ->setFileName('/path/to/your/example.tsv')
                ->write();
    
      $rows2 = [
          ['pineapple', 'パインアップル', "Sour\tYellow"]
      ];
      $tsvWriter->clearHeader()
               ->setRows($rows2)
               ->setOpenMode('a') // set open mode 'a'
               ->write();
    
      $rows3 = [
          ['orange', 'オレンジ', "Juicy\tOrange"]
      ];
      $tsvWriter->setRows($rows3)
                ->write();
    Result
      name<TAB>名前<TAB>feature
      apple<TAB>りんご<TAB>"Sweet<TAB>Red"
      pineapple<TAB>パインアップル<TAB>"Sour<TAB>Yellow"
      orange<TAB>オレンジ<TAB>"Juicy<TAB>Orange"
  • setPermission($permission);
    • You can set the file permissions
    • The default permission is 666
    • e.g.)
      $csvWriter->setRows($rows)
                ->setPermission(777) // set the permissions to 777
                ->write();

Other methods of instantiation

  • Arrayto::factory(XXX);
  <?php
  use SMB\Arrayto;

  $csv = Arrayto::factory(Arrayto::CSV);   // => SMB\Arrayto\Csv
  // $csv == Arrayto\Csv::factory();

  $tsv = Arrayto::factory(Arrayto::TSV);   // => SMB\Arrayto\Tsv
  // $tsv == Arrayto\Tsv::factory();

  $ltsv = Arrayto::factory(Arrayto::LTSV); // => SMB\Arrayto\Ltsv
  // $ltsv == Arrayto\Ltsv::factory();

  $xml = Arrayto::factory(Arrayto::XML);   // => SMB\Arrayto\Xml
  // $xml == Arrayto\Xml::factory();

  $json = Arrayto::factory(Arrayto::JSON); // => SMB\Arrayto\Json
  // $json == Arrayto\Json::factory();
  • Arrayto\Plugins\XXX\XXX
  <?php
  use SMB\Arrayto;

  $csvDownloader = new Arrayto\Plugins\Csv\Downloader();
  // $csvDownloader == Arrayto\Csv::factory()->getDownloader();
  $csvOutputter = new Arrayto\Plugins\Csv\Outputter();
  // $csvOutputter == Arrayto\Csv::factory()->getOutputter();
  $csvWriter = new Arrayto\Plugins\Csv\Writer();
  // $csvWriter == Arrayto\Csv::factory()->getWriter();

  $tsvDownloader = new Arrayto\Plugins\Tsv\Downloader();
  // $tsvDownloader == Arrayto\Tsv::factory()->getDownloader();
  $tsvOutputter = new Arrayto\Plugins\Tsv\Outputter();
  // $tsvOutputter == Arrayto\Tsv::factory()->getOutputter();
  $tsvWriter = new Arrayto\Plugins\Tsv\Writer();
  // $tsvWriter == Arrayto\Tsv::factory()->getWriter();

  $ltsvDownloader = new Arrayto\Plugins\Ltsv\Downloader();
  // $ltsvDownloader == Arrayto\Ltsv::factory()->getDownloader();
  $ltsvWriter = new Arrayto\Plugins\Ltsv\Writer();
  // $ltsvWriter == Arrayto\Ltsv::factory()->getWriter();

  $xmlDownloader = new Arrayto\Plugins\Xml\Downloader();
  // $xmlDownloader == Arrayto\Xml::factory()->getDownloader();
  $xmlWriter = new Arrayto\Plugins\Xml\Writer();
  // $xmlWriter == Arrayto\Xml::factory()->getWriter();

  $jsonDownloader = new Arrayto\Plugins\Json\Downloader();
  // $jsonDownloader == Arrayto\Json::factory()->getDownloader();
  $jsonOutputter = new Arrayto\Plugins\Json\Outputter();
  // $jsonOutputter == Arrayto\Json::factory()->getOutputter();
  $jsonWriter = new Arrayto\Plugins\Json\Writer();
  // $jsonWriter == Arrayto\Json::factory()->getWriter();

Testing

vendor/bin/phpunit

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 1.49k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-12-17

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固