grasmash / expander
在PHP数组文件中展开内部属性引用。
3.0.0
2022-05-10 13:14 UTC
Requires
- php: >=8.0
- dflydev/dot-access-data: ^3.0.0
- psr/log: ^2 | ^3
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-10 18:34:00 UTC
README
此工具将点符号表示的字符串属性引用展开为其对应的值。这在运行时展开配置文件中的属性引用很有用。
例如,请参阅Yaml Expander的实现。
安装
composer require grasmash/expander
示例用法
属性引用使用点符号表示数组键,必须用${}
括起来。
展开逻辑
<?php $array = [ 'type' => 'book', 'book' => [ 'title' => 'Dune', 'author' => 'Frank Herbert', 'copyright' => '${book.author} 1965', 'protaganist' => '${characters.0.name}', 'media' => [ 0 => 'hardcover', 1 => 'paperback', ], 'nested-reference' => '${book.sequel}', ], 'characters' => [ 0 => [ 'name' => 'Paul Atreides', 'occupation' => 'Kwisatz Haderach', 'aliases' => [ 0 => 'Usul', 1 => 'Muad\'Dib', 2 => 'The Preacher', ], ], 1 => [ 'name' => 'Duncan Idaho', 'occupation' => 'Swordmaster', ], ], 'summary' => '${book.title} by ${book.author}', 'publisher' => '${not.real.property}', 'sequels' => '${book.sequel}, and others.', 'available-products' => '${book.media.1}, ${book.media.0}', 'product-name' => '${${type}.title}', 'boolean-value' => true, 'expand-boolean' => '${boolean-value}', 'null-value' => NULL, 'inline-array' => [ 0 => 'one', 1 => 'two', 2 => 'three', ], 'expand-array' => '${inline-array}', 'env-test' => '${env.test}', ]; $expander = new Expander(); // Optionally set a logger. $expander->setLogger(new Psr\Log\NullLogger()); // Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter. // @see StringifierInterface. $expander->setStringifier(new Grasmash\Expander\Stringifier()); // Parse an array, expanding internal property references. $expanded = $expander->expandArrayProperties($array); // Parse an array, expanding references using both internal and supplementary values. $reference_properties = 'book' => ['sequel' => 'Dune Messiah']; // Set an environmental variable. putenv("test=gomjabbar"); $expanded = $expander->expandArrayProperties($array, $reference_properties); print_r($expanded);
结果数组
Array ( [type] => book [book] => Array ( [title] => Dune [author] => Frank Herbert [copyright] => Frank Herbert 1965 [protaganist] => Paul Atreides [media] => Array ( [0] => hardcover [1] => paperback ) [nested-reference] => Dune Messiah ) [characters] => Array ( [0] => Array ( [name] => Paul Atreides [occupation] => Kwisatz Haderach [aliases] => Array ( [0] => Usul [1] => Muad\'Dib [2] => The Preacher ) ) [1] => Array ( [name] => Duncan Idaho [occupation] => Swordmaster ) ) [summary] => Dune by Frank Herbert [publisher] => ${not.real.property} [sequels] => Dune Messiah, and others. [available-products] => paperback, hardcover [product-name] => Dune [boolean-value] => true, [expand-boolean] => true, [null-value] => [inline-array] => Array ( [0] => one [1] => two [2] => three ) [expand-array] => one,two,three [env-test] => gomjabbar [env] => Array ( [test] => gomjabbar ) )