Skip to content

Commit 3e39c9c

Browse files
committed
Added small optimization
1 parent bc7c126 commit 3e39c9c

File tree

1 file changed

+25
-33
lines changed

1 file changed

+25
-33
lines changed

‎src/Flow/ArrayDot/array_dot.php‎

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)