@@ -81,38 +81,42 @@ function array_dot_get(array $array, string $path)
8181 foreach ($ pathSteps as $ step ) {
8282 $ takenSteps [] = $ step ;
8383
84- // Wildcar step
85- if ($ step === '* ' ) {
84+ if (\in_array ($ step , ['* ' , '?* ' ], true )) {
8685 $ stepsLeft = \array_slice ($ pathSteps , \count ($ takenSteps ), \count ($ pathSteps ));
8786 $ results = [];
8887
8988 foreach (\array_keys ($ arraySlice ) as $ key ) {
90- /**
91- * @psalm-suppress MixedAssignment
92- * @psalm-suppress MixedArgument
93- */
94- $ results [] = array_dot_get ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ));
89+ if ($ step === '?* ' ) {
90+ /**
91+ * @psalm-suppress MixedArgument
92+ */
93+ if (array_dot_exists ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ))) {
94+ /**
95+ * @psalm-suppress MixedAssignment
96+ * @psalm-suppress MixedArgument
97+ */
98+ $ results [] = array_dot_get ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ));
99+ }
100+ } else {
101+ /**
102+ * @psalm-suppress MixedAssignment
103+ * @psalm-suppress MixedArgument
104+ */
105+ $ results [] = array_dot_get ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ));
106+ }
95107 }
96108
97109 return $ results ;
98110 }
99111
100- // Nullsafe wildcard
101- if ($ step === ' ?* ' ) {
102- $ stepsLeft = \array_diff ( $ pathSteps , $ takenSteps );
112+ // Multiselect
113+ if (\preg_match ( ' /^{(.*?)}$/ ' , $ step , $ subSteps ) ) {
114+ $ subSteps = \explode ( ' , ' , $ subSteps [ 1 ] );
103115 $ results = [];
104116
105- foreach (\array_keys ($ arraySlice ) as $ key ) {
106- /**
107- * @psalm-suppress MixedArgument
108- */
109- if (array_dot_exists ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ))) {
110- /**
111- * @psalm-suppress MixedAssignment
112- * @psalm-suppress MixedArgument
113- */
114- $ results [] = array_dot_get ($ arraySlice [$ key ], \implode ('. ' , $ stepsLeft ));
115- }
117+ foreach ($ subSteps as $ subStep ) {
118+ /** @psalm-suppress MixedAssignment */
119+ $ results [] = array_dot_get ($ arraySlice , \trim ($ subStep ));
116120 }
117121
118122 return $ results ;
@@ -133,18 +137,6 @@ function array_dot_get(array $array, string $path)
133137 $ takenSteps [] = $ step ;
134138 }
135139
136- if (\preg_match ('/^{(.*?)}$/ ' , $ step , $ subSteps )) {
137- $ subSteps = \explode (', ' , $ subSteps [1 ]);
138- $ results = [];
139-
140- foreach ($ subSteps as $ subStep ) {
141- /** @psalm-suppress MixedAssignment */
142- $ results [] = array_dot_get ($ arraySlice , \trim ($ subStep ));
143- }
144-
145- return $ results ;
146- }
147-
148140 if (\strpos ($ step , '\\{ ' ) !== false ) {
149141 $ step = \str_replace ('\\{ ' , '{ ' , $ step );
150142 \array_pop ($ takenSteps );
0 commit comments