2017 © Pedro PelÃĄez
 

library data

Extended implementation of ArrayObject

image

jbzoo/data

Extended implementation of ArrayObject

  • Wednesday, November 22, 2017
  • by SmetDenis
  • Repository
  • 5 Watchers
  • 74 Stars
  • 35,032 Installations
  • PHP
  • 15 Dependents
  • 0 Suggesters
  • 5 Forks
  • 0 Open issues
  • 22 Versions
  • 10 % Grown

The README.md

JBZoo / Data

CI Coverage Status Psalm Coverage Psalm Level CodeFactor
Stable Version Total Downloads Dependents GitHub License, (*1)

An extended version of the ArrayObject object for working with system settings or just for working with data arrays., (*2)

It provides a short syntax for daily routine, eliminates common mistakes. Allows you to work with various line and file formats - JSON, Yml, Ini, PHP arrays and simple objects., (*3)

* Installation * Usage * Comparison with pure PHP * Know your data * Methods * Filter values (required JBZoo/Utils) * Utility methods * Export to pretty-print format * Summary benchmark info (execution time) PHP v7.4 * Unit tests and check code style * License * See Also , (*4)

Installation

composer require jbzoo/data

Usage

Comparison with pure PHP


Action JBZoo/Data Pure PHP way
Create $d = data($someData) $ar = [/* ... */];
Supported formats Array, Object, ArrayObject, JSON, INI, Yml Array
Load form file *.php, *.ini, *.yml, *.json, serialized -
Get value or default $d->get('key', 42) $ar['key'] ?? 42
Get undefined #1 $d->get('undefined') (no any notice) $ar['undefined'] ?? null
Get undefined #2 $d->find('undefined') $ar['und'] ?? null
Get undefined #3 $d->undefined === null (no any notice) -
Get undefined #4 $d['undefined'] === null (no any notice) -
Get undefined #5 $d['undef']['undef'] === null (no any notice) -
Comparing #1 $d->get('key') === $someVar $ar['key'] === $someVar
Comparing #2 $d->is('key', $someVar) -
Comparing #3 $d->is('key', $someVar, true) (strict) -
Like array $d['key'] $ar['key']
Like object #1 $d->key -
Like object #2 $d->get('key') -
Like object #3 $d->find('key') -
Like object #4 $d->offsetGet('key') -
Isset #1 isset($d['key']) isset($ar['key'])
Isset #2 isset($d->key) array_key_exists('key', $ar)
Isset #3 $d->has('key') -
Nested key #1 $d->find('inner.inner.prop', $default) $ar['inner']['inner']['prop'] (error?)
Nested key #2 $d->inner['inner']['prop'] -
Nested key #3 $d['inner']['inner']['prop'] -
Export to Serialized echo data([/* ... */]) echo serialize([/* ... */])
Export to JSON echo (json([/* ... */])) (readable) echo json_encode([/* ... */])
Export to Yml echo yml([/* ... */]) (readable) -
Export to Ini echo ini([/* ... */]) (readable) -
Export to PHP Code echo phpArray([/* ... */]) (readable) -
JSON + -
Filters + -
Search + -
Flatten Recursive + -
Set Value $d['value'] = 42 $ar['value'] = 42
Set Nested Value $d->set('q.w.e.r.t.y') = 42 $ar['q']['w']['e']['r']['t']['y'] = 42
Set Nested Value (if it's undefined) $d->set('q.w.e.r.t.y') = 42 PHP Notice errors...

Know your data

$json = json('{ "some": "thing", "number": 42 }');
dump($json->getSchema();
// [
//     "some" => "string",
//     "number" => "int"
// ]

Methods

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);

Filter values (required JBZoo/Utils)

List of filters - JBZoo/Utils/Filter * bool - Converts many english words that equate to true or false to boolean. * int - Smart converting to integer * float - Smart converting to float * digits - Leaves only "0-9" * alpha - Leaves only "a-zA-Z" * alphanum - Combination of digits and alpha * base64 - Returns only chars which are compatible with base64 * path - Clean FS path * trim - Extend trim * arr - Converting to array * cmd - Cleanup system command (CLI) * email - Returns cleaned up email or null * strip - Strip tags * alias - Sluggify * low - String to lower (uses mbstring or symfony polyfill) * up - String to upper (uses mbstring or symfony polyfill) * clean - Returns safe string * html - HTML escaping * xml - XML escaping * esc - Escape chars for UTF-8 * function($value) { return $value; } - Your custom callback function, (*5)

$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);
});

Utility methods

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

Export to pretty-print format

echo $config;

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

Example of serializing the JSON object, (*6)

{
    "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"
        }
    }
}

Example of serializing the PHPArray object, (*7)

<?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',
        ),
    ),
);

Example of serializing the Yml object, (*8)

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']

Example of serializing the Ini object, (*9)

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"

Example of serializing the Data object, (*10)

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";}}}

Summary benchmark info (execution time) PHP v7.4

All benchmark tests are executing without xdebug and with a huge random array and 100.000 iterations., (*11)

Benchmark tests based on the tool phpbench/phpbench. See details here., (*12)

Please, pay attention - 1Ξs = 1/1.000.000 of second!, (*13)

benchmark: CreateObject , (*14)

subject groups its revs mean stdev rstdev mem_real diff
benchArrayObjectOrig Native,ArrayObject 3 100000 7.30Ξs 0.01Ξs 0.18% 8,388,608b 1.00x
benchArrayObjectExtOrig Native,ArrayObject,Extended 3 100000 7.43Ξs 0.05Ξs 0.66% 8,388,608b 1.02x
benchJson JSON 3 100000 7.55Ξs 0.01Ξs 0.15% 8,388,608b 1.03x
benchIni Ini 3 100000 7.55Ξs 0.01Ξs 0.15% 8,388,608b 1.03x
benchData Data 3 100000 7.57Ξs 0.03Ξs 0.41% 8,388,608b 1.04x
benchIniFunc Ini,Func 3 100000 7.62Ξs 0.01Ξs 0.10% 8,388,608b 1.04x
benchDataFunc Data,Func 3 100000 7.63Ξs 0.01Ξs 0.19% 8,388,608b 1.05x
benchYml Yml 3 100000 7.63Ξs 0.10Ξs 1.36% 8,388,608b 1.05x
benchJsonFunc JSON,Func 3 100000 7.64Ξs 0.01Ξs 0.11% 8,388,608b 1.05x
benchPhpArray PhpArray 3 100000 7.65Ξs 0.03Ξs 0.44% 8,388,608b 1.05x
benchYmlFunc Yml,Func 3 100000 7.70Ξs 0.05Ξs 0.60% 8,388,608b 1.05x
benchPhpArrayFunc PhpArray,Func 3 100000 7.75Ξs 0.06Ξs 0.72% 8,388,608b 1.06x

benchmark: GetUndefinedValue , (*15)

subject groups its revs mean stdev rstdev mem_real diff
benchArrayIsset Native,Array,Undefined 3 1000000 0.04Ξs 0.00Ξs 1.48% 8,388,608b 1.00x
benchDataOffsetGet Data,Undefined 3 1000000 0.11Ξs 0.00Ξs 0.41% 8,388,608b 2.88x
benchDataGet Data,Undefined 3 1000000 0.14Ξs 0.00Ξs 0.39% 8,388,608b 3.56x
benchDataArray Data,Undefined 3 1000000 0.14Ξs 0.00Ξs 0.08% 8,388,608b 3.72x
benchDataArrow Data,Undefined 3 1000000 0.15Ξs 0.00Ξs 0.34% 8,388,608b 3.86x
benchArrayRegularMuted Native,Array,Undefined 3 1000000 0.19Ξs 0.00Ξs 0.04% 8,388,608b 4.99x
benchDataFind Data,Undefined 3 1000000 0.37Ξs 0.00Ξs 0.11% 8,388,608b 9.69x
benchDataFindInner Data,Undefined 3 1000000 0.41Ξs 0.00Ξs 0.14% 8,388,608b 10.86x

benchmark: GetValue , (*16)

subject groups its revs mean stdev rstdev mem_real diff
benchArrayRegular Native,Array 3 1000000 0.04Ξs 0.00Ξs 5.02% 8,388,608b 1.00x
benchArrayRegularMuted Native,Array 3 1000000 0.04Ξs 0.00Ξs 1.40% 8,388,608b 1.06x
benchArrayIsset Native,Array 3 1000000 0.04Ξs 0.00Ξs 2.04% 8,388,608b 1.07x
benchArrayObjectArray Native,ArrayObject 3 1000000 0.05Ξs 0.00Ξs 1.07% 8,388,608b 1.14x
benchArrayObjectArrayExt Native,ArrayObject,Extended 3 1000000 0.05Ξs 0.00Ξs 0.24% 8,388,608b 1.19x
benchArrayObjectOffsetGet Native,ArrayObject 3 1000000 0.07Ξs 0.00Ξs 1.35% 8,388,608b 1.77x
benchArrayObjectExtOffsetGet Native,ArrayObject,Extended 3 1000000 0.08Ξs 0.00Ξs 0.23% 8,388,608b 1.86x
benchDataOffsetGet Data 3 1000000 0.16Ξs 0.00Ξs 0.28% 8,388,608b 4.01x
benchDataArray Data 3 1000000 0.20Ξs 0.00Ξs 0.17% 8,388,608b 4.96x
benchDataArrow Data 3 1000000 0.21Ξs 0.00Ξs 0.21% 8,388,608b 5.07x
benchDataGet Data 3 1000000 0.28Ξs 0.00Ξs 0.21% 8,388,608b 6.95x
benchDataFind Data 3 1000000 0.35Ξs 0.00Ξs 0.65% 8,388,608b 8.52x

benchmark: GetValueInner , (*17)

subject groups its revs mean stdev rstdev mem_real diff
benchArrayRegular Native,Array 3 1000000 0.05Ξs 0.00Ξs 0.23% 8,388,608b 1.00x
benchArrayRegularMuted Native,Array 3 1000000 0.06Ξs 0.00Ξs 0.86% 8,388,608b 1.06x
benchArrayIsset Native,Array 3 1000000 0.06Ξs 0.00Ξs 0.27% 8,388,608b 1.08x
benchArrayObjectArrayExt Native,ArrayObject,Extended 3 1000000 0.06Ξs 0.00Ξs 0.76% 8,388,608b 1.14x
benchArrayObjectArray Native,ArrayObject 3 1000000 0.07Ξs 0.00Ξs 1.39% 8,388,608b 1.22x
benchDataFind Data 3 1000000 0.81Ξs 0.01Ξs 1.06% 8,388,608b 15.22x

Unit tests and check code style

make update
make test-all

License

MIT, (*18)

See Also

  • CI-Report-Converter - Converting different error reports for deep compatibility with popular CI systems.
  • Composer-Diff - See what packages have changed after composer update.
  • Composer-Graph - Dependency graph visualization of composer.json based on mermaid-js.
  • Mermaid-PHP - Generate diagrams and flowcharts with the help of the mermaid script language.
  • Utils - Collection of useful PHP functions, mini-classes, and snippets for every day.
  • Image - Package provides object-oriented way to manipulate with images as simple as possible.
  • Retry - Tiny PHP library providing retry/backoff functionality with multiple backoff strategies and jitter support.
  • SimpleTypes - Converting any values and measures - money, weight, exchange rates, length, ...

The Versions

22/11 2017

dev-master

9999999-dev

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

22/11 2017

2.0.1

2.0.1.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

22/11 2017

2.0.0

2.0.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

17/11 2017

1.7.0

1.7.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

23/06 2017

1.6.2

1.6.2.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

23/06 2017

1.6.1

1.6.1.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

23/06 2017

1.6.0

1.6.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

06/08 2016

dev-develop

dev-develop

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

06/08 2016

1.5.0

1.5.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

26/04 2016

1.4.1

1.4.1.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

31/03 2016

1.4.0

1.4.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

25/02 2016

1.3.6

1.3.6.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

24/02 2016

1.3.5

1.3.5.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

21/02 2016

1.3.4

1.3.4.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

20/02 2016

1.3.3

1.3.3.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

json ini config array data arrayobject yml params

20/02 2016

1.3.2

1.3.2.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

config array data arrayobject

17/12 2015

1.3.1

1.3.1.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

config array data arrayobject

20/10 2015

1.3.0

1.3.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

config array data arrayobject

13/10 2015

1.2.1

1.2.1.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

config array data arrayobject

07/10 2015

1.2.0

1.2.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

config array data arrayobject

06/08 2015

1.1

1.1.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

 

The Development Requires

config array data arrayobject

02/08 2015

1.0

1.0.0.0

Extended implementation of ArrayObject

  Sources   Download

MIT

The Requires

  • php >=5.3.1

 

The Development Requires

config array data arrayobject