imran/data-converter

一个PHP类,可以将不同的数据格式相互转换。

dev-main 2023-02-22 13:03 UTC

This package is auto-updated.

Last update: 2024-09-22 16:26:48 UTC


README

DataConverter类提供了一种简单方便的方式来将一种格式数据转换为另一种格式。无论是需要将CSV文件转换为JSON,还是将数组转换为YAML,此类都能满足您的需求。支持的格式包括CSV、JSON、XML、YAML、序列化PHP数据和PHP对象。

此类具有用户友好的界面,允许您轻松地将字符串或文件格式的数据转换为其他格式。此外,它还具有几个方法,允许您微调转换过程,例如指定XML转换的根元素和行元素。

凭借其全面的转换方法集,DataConverter类是任何PHP开发人员不可或缺的工具。无论您是在进行一个小型个人项目还是大型企业应用程序的开发,此类都可以帮助您简化数据转换需求。

功能

  • 将CSV转换为数组
  • 将数组转换为CSV
  • 将CSV转换为JSON
  • 将JSON转换为CSV
  • 将JSON转换为数组
  • 将数组转换为JSON
  • 将XML转换为数组
  • 将数组转换为XML
  • 将XML转换为JSON
  • 将JSON转换为XML
  • 将数组序列化
  • 将序列化转换为数组
  • 将YAML转换为数组
  • 将数组转换为YAML
  • 将CSV转换为XML
  • 将XML转换为CSV

需求

  • PHP 8.0或更高版本
  • PHP XML扩展:ext-simplexml
  • PHP Yaml扩展:ext-yaml

安装

首先,将DataConverter.php类包含到您的项目中。

require_once 'path/to/DataConverter.php';

或使用composer(推荐方式)

composer require imran/data-converter

使用

然后,创建DataConverter类的实例

use Imran\DataConverer\DataConverer;

$dataConverter = new DataConverter();

方法

CSV转换为数组

$csvData = "name,email,phone
John Doe,johndoe@example.com,1234567890
Jane Doe,janedoe@example.com,0987654321";

$arrayData = $dataConverter->csvToArray($csvData);
print_r($arrayData);
输出
Array
(
    [0] => Array
        (
            [name] => John Doe
            [email] => johndoe@example.com
            [phone] => 1234567890
        )

    [1] => Array
        (
            [name] => Jane Doe
            [email] => janedoe@example.com
            [phone] => 0987654321
        )
)

数组转换为CSV

$arrayData = [
    [
        'name' => 'John Doe',
        'email' => 'johndoe@example.com',
        'phone' => '1234567890'
    ],
    [
        'name' => 'Jane Doe',
        'email' => 'janedoe@example.com',
        'phone' => '0987654321'
    ]
];

$csvData = $dataConverter->arrayToCsv($arrayData);
print_r($csvData);
输出
name,email,phone
John Doe,johndoe@example.com,1234567890
Jane Doe,janedoe@example.com,0987654321

JSON转换为数组

$jsonData = '[{"name":"John Doe","email":"johndoe@example.com","phone":"1234567890"},{"name":"Jane Doe","email":"janedoe@example.com","phone":"0987654321"}]';

$arrayData = $dataConverter->jsonToArray($jsonData);
print_r($arrayData);
输出
Array
(
    [0] => Array
        (
            [name] => John Doe
            [email] => johndoe@example.com
            [phone] => 1234567890
        )

    [1] => Array
        (
            [name] => Jane Doe
            [email] => janedoe@example.com
            [phone] => 0987654321
        )
)

数组转换为JSON

$arrayData = [
    [
        'name' => 'John Doe',
        'email' => 'johndoe@example.com',
        'phone' => '1234567890'
    ],
    [
        'name' => 'Jane Doe',
        'email' => 'janedoe@example.com',
        'phone' => '0987654321'
    ]
];

$jsonData = $dataConverter->arrayToJson($arrayData);
print_r($jsonData);
输出
[{"name":"John Doe","email":"johndoe@example.com","phone":"1234567890"},{"name":"Jane Doe","email":"janedoe@example.com","phone":"0987654321"}]

XML转换为数组

$xmlData = '<root>
    <item>
        <name>John Doe</name>
        <email>johndoe@example.com</email>
        <phone>1234567890</phone>
    </item>
    <item>
        <name>Jane Doe</name>
        <email>janedoe@example.com</email>
        <phone>0987654321</phone>
    </item>
</root>';

$arrayData = $dataConverter->xmlToArray($xmlData);
print_r($arrayData);
输出
Array
(
    [items] => Array
    (
        [0] => Array
        (
            [name] => John Doe
            [email] => johndoe@example.com
            [phone] => 1234567890
        )
        
        [1] => Array
        (
            [name] => Jane Doe
            [email] => janedoe@example.com
            [phone] => 0987654321
        )
    )
)

数组转换为XML

$arrayData = [
    [
        'name' => 'John Doe',
        'email' => 'johndoe@example.com',
        'phone' => '1234567890'
    ],
    [
        'name' => 'Jane Doe',
        'email' => 'janedoe@example.com',
        'phone' => '0987654321'
    ]
];

$xmlData = $dataConverter->arrayToXml($arrayData);
print_r($xmlData);
输出
<root>
  <item>
    <name>John Doe</name>
    <email>johndoe@example.com</email>
    <phone>1234567890</phone>
  </item>
  <item>
    <name>Jane Doe</name>
    <email>janedoe@example.com</email>
    <phone>0987654321</phone>
  </item>
</root>

反序列化

$dataConverter = new DataConverter();
$serializedData = "a:3:{s:4:\"name\";s:8:\"John Doe\";s:5:\"email\";s:17:\"johndoe@example.com\";s:5:\"phone\";s:6:\"123456\";}";
$unserializedData = $dataConverter->unserialize($serializedData, 'serialized');
print_r($unserializedData);
输出
Array
(
    [name] => John Doe
    [email] => johndoe@example.com
    [phone] => 123456
)

序列化

$dataConverter = new DataConverter();
$arrayData = array(
    'name' => 'John Doe',
    'email' => 'johndoe@example.com',
    'phone' => '123456'
);
$serializedData = $dataConverter->serialize($arrayData, 'serialized');
echo $serializedData;
输出
a:3:{s:4:"name";s:8:"John Doe";s:5:"email";s:17:"johndoe@example.com";s:5:"phone";s:6:"123456";}

yamlToArray

$dataConverter = new DataConverter();
$yamlData = "name: John Doe
email: johndoe@example.com
phone: 123456";
$arrayData = $dataConverter->yamlToArray($yamlData);
print_r($arrayData);
输出
Array
(
    [name] => John Doe
    [email] => johndoe@example.com
    [phone] => 123456
)

arrayToYaml

$dataConverter = new DataConverter();
$arrayData = array(
    'name' => 'John Doe',
    'email' => 'johndoe@example.com',
    'phone' => '123456'
);
$yamlData = $dataConverter->arrayToYaml($arrayData);
echo $yamlData;
输出
name: John Doe
email: johndoe@example.com

csvToJson

$csv = "name,age,city\nJohn,30,New York\nJane,25,London";

$json = $dataConverter->csvToJson($csv);

// Output:
// '[{"name":"John","age":"30","city":"New York"},{"name":"Jane","age":"25","city":"London"}]'

jsonToCsv

$json = '[{"name":"John","age":"30","city":"New York"},{"name":"Jane","age":"25","city":"London"}]';

$csv = $dataConverter->jsonToCsv($json);

// Output:
// "name,age,city\nJohn,30,New York\nJane,25,London"

xmlToJson

$xml = '<data>
  <item>
    <name>John</name>
    <age>30</age>
    <city>New York</city>
  </item>
  <item>
    <name>Jane</name>
    <age>25</age>
    <city>London</city>
  </item>
</data>';

$json = $dataConverter->xmlToJson($xml);

// Output:
// '[{"name":"John","age":"30","city":"New York"},{"name":"Jane","age":"25","city":"London"}]'

jsonToXml

该方法接受两个参数:JSON字符串和可选的根元素名称(默认为"root")。该方法返回结果XML字符串。

$json = '[{"name":"John","age":"30","city":"New York"},{"name":"Jane","age":"25","city":"London"}]';

$xml = $dataConverter->jsonToXml($json);

// Output:
// '<root>
//   <item>
//     <name>John</name>
//     <age>30</age>
//     <city>New York</city>
//   </item>
//   <item>
//     <name>Jane</name>
//     <age>25</age>
//     <city>London</city>
//   </item>
// </root>'

csvToXml

csvToXml方法将CSV字符串转换为XML字符串。

使用

该方法接受三个参数:CSV字符串、可选的分隔符

$dataConverter = new DataConverter();
$csv = <<< CSV
id,name,age
1,John Doe,32
2,Jane Doe,29
CSV;

$xml = $dataConverter->csvToXml($csv);
echo $xml;

这将生成以下XML输出

<?xml version="1.0"?>
<rows>
  <row>
    <id>1</id>
    <name>John Doe</name>
    <age>32</age>
  </row>
  <row>
    <id>2</id>
    <name>Jane Doe</name>
    <age>29</age>
  </row>
</rows>

您可以通过传递方法中的可选第二个和第三个参数来自定义根元素名称和行元素名称。例如

$xml = $dataConverter->csvToXml($csv, 'persons', 'person');
echo $xml;

这将生成以下XML输出

<?xml version="1.0"?>
<persons>
  <person>
    <id>1</id>
    <name>John Doe</name>
    <age>32</age>
  </person>
  <person>
    <id>2</id>
    <name>Jane Doe</name>
    <age>29</age>
  </person>
</persons>

运行测试

要运行测试,请使用以下命令

.\vendor\bin\phpunit tests/DataConverterTest.php

嗨,我是Imran Ali!👋

🚀 关于我

资深全栈开发者,专注于前端和后端开发。具有动态网络项目开发周期的所有阶段的经验。具有创新精神、创造力,并证明是一个团队合作者,拥有前端开发技术学位,并拥有7年开发、管理和维护网站、应用程序和程序的经验。我寻求获得高级全栈开发者的职位,以便我可以与有价值的客户分享我的技能、专业知识和经验。

🛠 技能

PHP OOP、Laravel、Codeigniter、JavaScript、Node、React、Vue、Git、HTML、REST API、TypeScript、Angular、SCSS、Docker、CI/CD Jenkins、Bootstrap、响应式设计、ASP.NET Core

🔗 关注我

linkedin twitter

许可证

MIT License GPLv3 License AGPL License

贡献

贡献总是受欢迎的!

请参阅 contributing.md 了解如何开始。

请遵守本项目的 行为准则