Chris@0
|
1 [](https://travis-ci.org/grasmash/expander) [](https://packagist.org/packages/grasmash/expander)
|
Chris@0
|
2 [](https://packagist.org/packages/grasmash/expander) [](https://coveralls.io/github/grasmash/expander?branch=master)
|
Chris@0
|
3
|
Chris@0
|
4 This tool expands property references in PHP arrays. For example implementation, see Yaml Expander.
|
Chris@0
|
5
|
Chris@0
|
6 ### Installation
|
Chris@0
|
7
|
Chris@0
|
8 composer require grasmash/expander
|
Chris@0
|
9
|
Chris@0
|
10 ### Example usage:
|
Chris@0
|
11
|
Chris@0
|
12 Property references use dot notation to indicate array keys, and must be wrapped in `${}`.
|
Chris@0
|
13
|
Chris@0
|
14 Expansion logic:
|
Chris@0
|
15
|
Chris@0
|
16 ```php
|
Chris@0
|
17 <?php
|
Chris@0
|
18
|
Chris@0
|
19 $array = [
|
Chris@0
|
20 'type' => 'book',
|
Chris@0
|
21 'book' => [
|
Chris@0
|
22 'title' => 'Dune',
|
Chris@0
|
23 'author' => 'Frank Herbert',
|
Chris@0
|
24 'copyright' => '${book.author} 1965',
|
Chris@0
|
25 'protaganist' => '${characters.0.name}',
|
Chris@0
|
26 'media' => [
|
Chris@0
|
27 0 => 'hardcover',
|
Chris@0
|
28 1 => 'paperback',
|
Chris@0
|
29 ],
|
Chris@0
|
30 'nested-reference' => '${book.sequel}',
|
Chris@0
|
31 ],
|
Chris@0
|
32 'characters' => [
|
Chris@0
|
33 0 => [
|
Chris@0
|
34 'name' => 'Paul Atreides',
|
Chris@0
|
35 'occupation' => 'Kwisatz Haderach',
|
Chris@0
|
36 'aliases' => [
|
Chris@0
|
37 0 => 'Usul',
|
Chris@0
|
38 1 => 'Muad\'Dib',
|
Chris@0
|
39 2 => 'The Preacher',
|
Chris@0
|
40 ],
|
Chris@0
|
41 ],
|
Chris@0
|
42 1 => [
|
Chris@0
|
43 'name' => 'Duncan Idaho',
|
Chris@0
|
44 'occupation' => 'Swordmaster',
|
Chris@0
|
45 ],
|
Chris@0
|
46 ],
|
Chris@0
|
47 'summary' => '${book.title} by ${book.author}',
|
Chris@0
|
48 'publisher' => '${not.real.property}',
|
Chris@0
|
49 'sequels' => '${book.sequel}, and others.',
|
Chris@0
|
50 'available-products' => '${book.media.1}, ${book.media.0}',
|
Chris@0
|
51 'product-name' => '${${type}.title}',
|
Chris@0
|
52 'boolean-value' => true,
|
Chris@0
|
53 'null-value' => NULL,
|
Chris@0
|
54 'inline-array' => [
|
Chris@0
|
55 0 => 'one',
|
Chris@0
|
56 1 => 'two',
|
Chris@0
|
57 2 => 'three',
|
Chris@0
|
58 ],
|
Chris@0
|
59 'expand-array' => '${inline-array}',
|
Chris@0
|
60 'env-test' => '${env.test}',
|
Chris@0
|
61 ];
|
Chris@0
|
62
|
Chris@0
|
63 $expander = new Expander();
|
Chris@0
|
64 // Optionally set a logger.
|
Chris@0
|
65 $expander->setLogger(new Psr\Log\NullLogger());
|
Chris@0
|
66 // Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter.
|
Chris@0
|
67 // @see StringifierInterface.
|
Chris@0
|
68 $expander->setStringifier(new Grasmash\Expander\Stringifier());
|
Chris@0
|
69
|
Chris@0
|
70 // Parse an array, expanding internal property references.
|
Chris@0
|
71 $expanded = $expander->expandArrayProperties($array);
|
Chris@0
|
72
|
Chris@0
|
73 // Parse an array, expanding references using both internal and supplementary values.
|
Chris@0
|
74 $reference_properties = 'book' => ['sequel' => 'Dune Messiah'];
|
Chris@0
|
75 // Set an environmental variable.
|
Chris@0
|
76 putenv("test=gomjabbar");
|
Chris@0
|
77 $expanded = $expander->expandArrayProperties($array, $reference_properties);
|
Chris@0
|
78
|
Chris@0
|
79 print_r($expanded);
|
Chris@0
|
80 ````
|
Chris@0
|
81
|
Chris@0
|
82 Resultant array:
|
Chris@0
|
83
|
Chris@0
|
84 ```php
|
Chris@0
|
85 Array
|
Chris@0
|
86 (
|
Chris@0
|
87 [type] => book
|
Chris@0
|
88 [book] => Array
|
Chris@0
|
89 (
|
Chris@0
|
90 [title] => Dune
|
Chris@0
|
91 [author] => Frank Herbert
|
Chris@0
|
92 [copyright] => Frank Herbert 1965
|
Chris@0
|
93 [protaganist] => Paul Atreides
|
Chris@0
|
94 [media] => Array
|
Chris@0
|
95 (
|
Chris@0
|
96 [0] => hardcover
|
Chris@0
|
97 [1] => paperback
|
Chris@0
|
98 )
|
Chris@0
|
99
|
Chris@0
|
100 [nested-reference] => Dune Messiah
|
Chris@0
|
101 )
|
Chris@0
|
102
|
Chris@0
|
103 [characters] => Array
|
Chris@0
|
104 (
|
Chris@0
|
105 [0] => Array
|
Chris@0
|
106 (
|
Chris@0
|
107 [name] => Paul Atreides
|
Chris@0
|
108 [occupation] => Kwisatz Haderach
|
Chris@0
|
109 [aliases] => Array
|
Chris@0
|
110 (
|
Chris@0
|
111 [0] => Usul
|
Chris@0
|
112 [1] => Muad'Dib
|
Chris@0
|
113 [2] => The Preacher
|
Chris@0
|
114 )
|
Chris@0
|
115
|
Chris@0
|
116 )
|
Chris@0
|
117
|
Chris@0
|
118 [1] => Array
|
Chris@0
|
119 (
|
Chris@0
|
120 [name] => Duncan Idaho
|
Chris@0
|
121 [occupation] => Swordmaster
|
Chris@0
|
122 )
|
Chris@0
|
123
|
Chris@0
|
124 )
|
Chris@0
|
125
|
Chris@0
|
126 [summary] => Dune by Frank Herbert
|
Chris@0
|
127 [publisher] => ${not.real.property}
|
Chris@0
|
128 [sequels] => Dune Messiah, and others.
|
Chris@0
|
129 [available-products] => paperback, hardcover
|
Chris@0
|
130 [product-name] => Dune
|
Chris@0
|
131 [boolean-value] => 1
|
Chris@0
|
132 [null-value] =>
|
Chris@0
|
133 [inline-array] => Array
|
Chris@0
|
134 (
|
Chris@0
|
135 [0] => one
|
Chris@0
|
136 [1] => two
|
Chris@0
|
137 [2] => three
|
Chris@0
|
138 )
|
Chris@0
|
139
|
Chris@0
|
140 [expand-array] => one,two,three
|
Chris@0
|
141 [env-test] => gomjabbar
|
Chris@0
|
142 [env] => Array
|
Chris@0
|
143 (
|
Chris@0
|
144 [test] => gomjabbar
|
Chris@0
|
145 )
|
Chris@0
|
146
|
Chris@0
|
147 )
|
Chris@0
|
148
|
Chris@0
|
149 ```
|