lkeme/data

ArrayObject 对象的扩展版本,用于处理系统设置或仅用于处理数据数组

维护者

详细信息

github.com/lkeme/Data

源代码

4.3.3 2021-11-08 12:04 UTC

README

Coverage Status Psalm Coverage Scrutinizer Code Quality CodeFactor PHP Strict Types Stable Version Latest Unstable Version Dependents GitHub Issues Total Downloads GitHub License

ArrayObject 对象的扩展版本,用于处理系统设置或仅用于处理数据数组。

它提供了一种简短的语法来处理日常任务,消除了常见的错误。允许您处理各种行和文件格式 - JSON、Yml、Ini、PHP 数组和简单对象。

安装

composer require jbzoo/data

使用方法

与纯 PHP 的比较

方法

use function JBZoo\Data\data;
use function JBZoo\Data\ini;
use function JBZoo\Data\json;
use function JBZoo\Data\phpArray;
use function JBZoo\Data\yml;

$config = data([/* Assoc Array */]);       // Any PHP-array or simple object, serialized data
$config = ini('./configs/some.ini');       // Load configs from ini file (or string, or simple array)
$config = yml('./configs/some.yml');       // Yml (or string, or simple array). Parsed with Symfony/Yaml Component.
$config = json('./configs/some.json');     // JSON File (or string, or simple array)
$config = phpArray('./configs/some.php');  // PHP-file that must return array

// Read
$config->get('key', 42);                   // Returns value if it exists oR returns default value
$config['key'];                            // As regular array
$config->key;                              // As regular object

// Read nested values without PHP errors
$config->find('deep.config.key', 42);      // Gets `$config['very']['deep']['config']['key']` OR returns default value

// Write
$config->set('key', 42);
$config['key'] = 42;
$config->key = 42;

// Isset
$config->has('key');
isset($config['key']);
isset($config->key);

// Unset
$config->remove('key');
unset($config['key']);
unset($config->key);

过滤值(需要 JBZoo/Utils)

过滤器列表 - JBZoo/Utils/Filter

  • bool - 将许多等于真或假的英语单词转换为布尔值。
  • int - 智能转换为整数
  • float - 智能转换为浮点数
  • digits - 仅保留 "0-9"
  • alpha - 仅保留 "a-zA-Z"
  • alphanum - digitsalpha 的组合
  • base64 - 返回与 base64 兼容的字符
  • path - 清理文件系统路径
  • trim - 扩展 trim
  • arr - 转换为数组
  • cmd - 清理系统命令(CLI)
  • email - 返回清理后的电子邮件或 null
  • strip - 去除标签
  • alias - Sluggify
  • low - 将字符串转换为小写(使用 mbstring 或 symfony polyfill)
  • up - 将字符串转换为大写(使用 mbstring 或 symfony polyfill)
  • clean - 返回安全的字符串
  • html - HTML 转义
  • xml - XML 转义
  • esc - 为 UTF-8 转义字符
  • function($value) { return $value; } - 您的自定义回调函数
$config->get('key', 42, 'int');         // Smart converting to integer
$config->find('key', 42, 'float');      // To float
$config->find('no', 'yes', 'bool');     // Smart converting popular word to boolean value
$config->get('key', 42, 'strip, trim'); // Chain of filters

// Your custom handler
$config->get('key', 42, function($value) {
    return (float)str_replace(',', '.', $value);
});

实用方法

$config->search($needle);       // Find a value also in nested arrays/objects
$config->flattenRecursive();    // Return flattened array copy. Keys are <b>NOT</b> preserved.

导出到美化打印格式

echo $config;

$result = '' . $config;
$result = (string)$config;
$result = $config->__toString();

序列化 JSON 对象的示例

{
    "empty": "",
    "zero": "0",
    "string": " ",
    "tag": "<a href=\"http:\/\/google.com\">Google.com<\/a>",
    "array1": {
        "0": "1",
        "1": "2"
    },
    "section": {
        "array2": {
            "0": "1",
            "12": "2",
            "3": "3"
        }
    },
    "section.nested": {
        "array3": {
            "00": "0",
            "01": "1"
        }
    }
}

序列化 PHPArray 对象的示例

<?php

return array(
    'empty' => '',
    'zero' => '0',
    'string' => ' ',
    'tag' => '<a href="http://google.com">Google.com</a>',
    'array1' => array(
        0 => '1',
        1 => '2',
    ),
    'section' => array(
        'array2' => array(
            0 => '1',
            12 => '2',
            3 => '3',
        ),
    ),
    'section.nested' => array(
        'array3' => array(
            '00' => '0',
            '01' => '1',
        ),
    ),
);

序列化 Yml 对象的示例

empty: ''
zero: '0'
string: ' '
tag: '<a href="http://google.com">Google.com</a>'
array1:
    - '1'
    - '2'
section:
    array2: { 0: '1', 12: '2', 3: '3' }
section.nested:
    array3: ['0', '1']

序列化 Ini 对象的示例

empty = ""
zero = "0"
string = " "
tag = "<a href=\"http://google.com\">Google.com</a>"
array1[0] = "1"
array1[1] = "2"

[section]
array2[0] = "1"
array2[12] = "2"
array2[3] = "3"

[section.nested]
array3[00] = "0"
array3[01] = "1"

序列化 Data 对象的示例

a:7:{s:5:"empty";s:0:"";s:4:"zero";s:1:"0";s:6:"string";s:1:" ";s:3:"tag";s:42:"<a href="http://google.com">Google.com</a>";s:6:"array1";a:2:{i:0;s:1:"1";i:1;s:1:"2";}s:7:"section";a:1:{s:6:"array2";a:3:{i:0;s:1:"1";i:12;s:1:"2";i:3;s:1:"3";}}s:14:"section.nested";a:1:{s:6:"array3";a:2:{s:2:"00";s:1:"0";s:2:"01";s:1:"1";}}}

总结基准测试信息(执行时间)PHP v7.4

所有基准测试都在没有 xdebug 的情况下执行,并使用巨大的随机数组和 100,000 次迭代。

基准测试基于工具 phpbench/phpbench。详细信息见 此处

请注意 - 1μs = 1/1,000,000 秒!

基准测试:CreateObject

基准测试:GetUndefinedValue

基准测试:GetValue

基准测试:GetValueInner

单元测试和代码风格检查

make update
make test-all

许可证

MIT

另请参阅

  • CI-Report-Converter - 转换不同错误报告,以与流行的 CI 系统实现深兼容。
  • Composer-Diff - 查看 composer update 之后发生了哪些包的变化。
  • Composer-Graph - 基于 mermaid-js 的 composer.json 的依赖图可视化。
  • Mermaid-PHP - 使用 mermaid 脚本语言生成图表和流程图。
  • Utils - 收集了实用的PHP函数、迷你类和常用片段。
  • Image - 提供了一种面向对象的方式来尽可能简单地操作图像。
  • Retry - 一个小巧的PHP库,提供重试/退避功能,支持多种退避策略和抖动支持。
  • SimpleTypes - 转换任何值和度量 - 货币、重量、汇率、长度等。