Vous êtes connecté en tant que anonymous Se Deconnecter
name mode size
..
Format 040000
Test 040000
.gitignore 100644 118B
.travis.yml 100644 169B
Format.php 100644 503B
README.md 100644 4.65kB
Structure.php 100644 19.86kB
StructureHelper.php 100644 11.41kB
ValueReference.php 100644 2.2kB
composer.json 100644 975B
phpunit.travis.xml 100644 1.11kB
phpunit.xml.dist 100644 409B
README.md
# Windwalker Structure Windwalker Structure is a storage of nested array or object, help us manage multi-level structures data. ## Installation via Composer Add this to the require block in your `composer.json`. ``` json { "require": { "windwalker/structure": "~3.0" } } ``` ## Supported Formats - JSON - PHP file (return array or class) - JSON - [HJSON](https://hjson.org/) - YAML - [TOML](https://github.com/toml-lang/toml) - XML - INI ## Getting Started ``` php use Windwalker\Structure\Structure; $structure = new Structure; // Set a value in the structure. $structure->set('foo', 'bar'); // Get a value from the structure; $value = $structure->get('foo'); ``` ## Load config by Structure ``` php use Windwalker\Structure\Structure; $structure = new Structure; // Load by string $structure->loadString('{"foo" : "bar"}'); $structure->loadString('<root></root>', 'xml'); // Load by object or array $structure->load($object); // Load by file $structure->loadFile($root . '/config/config.json', 'json'); ``` ## Accessing a Structure by getter & setter ### Get value ``` php $structure->get('foo'); // Get a non-exists value and return default $structure->get('foo', 'default'); // OR $structure->get('foo') ?: 'default'; ``` ### Set value ``` php // Set value $structure->set('bar', $value); // Sets a default value if not already assigned. $structure->def('bar', $default); ``` ### Accessing children value by path ``` php $json = '{ "parent" : { "child" : "Foo" } }'; $structure = new Structure($json); $structure->get('parent.child'); // return 'Foo' $structure->set('parent.child', $value); ``` ### Append & Prepend Support `push / pop / shift / unshift` methods. ``` php $structure->set('foo.bar', array('fisrt', 'second')); $structure->push('foo.bar', 'third'); $structure->get('foo.bar'); // Result: Array(first, second, third) ``` ### Use other separator ``` php $structure->setSeparator('/'); $data = $structure->get('foo/bar'); ``` ## Accessing a Structure as an Array The `Structure` class implements `ArrayAccess` so the properties of the structure can be accessed as an array. Consider the following examples: ``` php // Set a value in the structure. $structure['foo'] = 'bar'; // Get a value from the structure; $value = $structure['foo']; // Check if a key in the structure is set. if (isset($structure['foo'])) { echo 'Say bar.'; } ``` ## Merge Structure #### Using load* methods to merge two config files. ``` php $json1 = '{ "field" : { "keyA" : "valueA", "keyB" : "valueB" } }'; $json2 = '{ "field" : { "keyB" : "a new valueB" } }'; $structure->loadString($json1); $structure->loadString($json2); ``` Output ``` Array( field => Array( keyA => valueA keyB => a new valueB ) ) ``` #### Merge Another Structure ``` php $object1 = '{ "foo" : "foo value", "bar" : { "bar1" : "bar value 1", "bar2" : "bar value 2" } }'; $object2 = '{ "foo" : "foo value", "bar" : { "bar2" : "new bar value 2" } }'; $structure1 = new Structure(json_decode($object1)); $structure2 = new Structure(json_decode($object2)); $structure1->merge($structure2); ``` If you just want to merge first level, do not hope recursive: ``` php $structure1->merge($structure2, false); // Set param 2 to false that Structure will only merge first level ``` Merge to a child node: ``` php $structure->mergeTo('foo.bar', $anotherStructure); ``` ## Dump to file. ``` php $structure->toString(); $structure->toString('xml'); $structure->toString('ini'); ``` ## Dump to one dimension ``` php $array = array( 'flower' => array( 'sunflower' => 'light', 'sakura' => 'samurai' ) ); $structure = new Structure($array); // Make data to one dimension $flatted = $structure->flatten(); print_r($flatted); ``` The result: ``` Array ( [flower.sunflower] => light [flower.sakura] => samurai ) ``` ## Using YAML Add Symfony YAML component in `composer.json` ``` json { "require-dev": { "symfony/yaml": "~3.0" } } ``` Using `yaml` format ``` php $structure->loadFile($yamlFile, 'yaml'); $structure->loadString('foo: bar', 'yaml'); // Convert to string $structure->toString('yaml'); ``` ## StructureHelper ``` php use Windwalker\Structure\StructureHelper; StructureHelper::loadFaile($file, $format); // File to array StructureHelper::loadString($string, $format); // String to array StructureHelper::toString($array, $format); // Array to string // Use format class $json = StructureHelper::getFormatClass('json'); // Get JsonFormat $string = $json::structToString($array); ```