Skip to content

Commit 299b56f

Browse files
committed
Move array_merge calls out of loops to improve performance
1 parent b4c513d commit 299b56f

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Extension/Validator/ViolationMapper/ViolationMapper.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,18 @@ public function mapViolation(ConstraintViolation $violation, FormInterface $form
185185

186186
if (null !== $this->translator) {
187187
$form = $scope;
188-
$translationParameters = $form->getConfig()->getOption('label_translation_parameters', []);
188+
$translationParameters[] = $form->getConfig()->getOption('label_translation_parameters', []);
189189

190190
do {
191191
$translationDomain = $form->getConfig()->getOption('translation_domain');
192-
$translationParameters = array_merge($form->getConfig()->getOption('label_translation_parameters', []), $translationParameters);
192+
array_unshift(
193+
$translationParameters,
194+
$form->getConfig()->getOption('label_translation_parameters', [])
195+
);
193196
} while (null === $translationDomain && null !== $form = $form->getParent());
194197

198+
$translationParameters = array_merge([], ...$translationParameters);
199+
195200
$label = $this->translator->trans(
196201
$label,
197202
$translationParameters,

FormRegistry.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ public function getType(string $name)
100100
*/
101101
private function resolveType(FormTypeInterface $type): ResolvedFormTypeInterface
102102
{
103-
$typeExtensions = [];
104103
$parentType = $type->getParent();
105104
$fqcn = \get_class($type);
106105

@@ -111,17 +110,15 @@ private function resolveType(FormTypeInterface $type): ResolvedFormTypeInterface
111110

112111
$this->checkedTypes[$fqcn] = true;
113112

113+
$typeExtensions = [];
114114
try {
115115
foreach ($this->extensions as $extension) {
116-
$typeExtensions = array_merge(
117-
$typeExtensions,
118-
$extension->getTypeExtensions($fqcn)
119-
);
116+
$typeExtensions[] = $extension->getTypeExtensions($fqcn);
120117
}
121118

122119
return $this->resolvedTypeFactory->createResolvedType(
123120
$type,
124-
$typeExtensions,
121+
array_merge([], ...$typeExtensions),
125122
$parentType ? $this->getType($parentType) : null
126123
);
127124
} finally {

FormTypeGuesserChain.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,20 @@ class FormTypeGuesserChain implements FormTypeGuesserInterface
2525
*/
2626
public function __construct(iterable $guessers)
2727
{
28+
$tmpGuessers = [];
2829
foreach ($guessers as $guesser) {
2930
if (!$guesser instanceof FormTypeGuesserInterface) {
3031
throw new UnexpectedTypeException($guesser, FormTypeGuesserInterface::class);
3132
}
3233

3334
if ($guesser instanceof self) {
34-
$this->guessers = array_merge($this->guessers, $guesser->guessers);
35+
$tmpGuessers[] = $guesser->guessers;
3536
} else {
36-
$this->guessers[] = $guesser;
37+
$tmpGuessers[] = [$guesser];
3738
}
3839
}
40+
41+
$this->guessers = array_merge([], ...$tmpGuessers);
3942
}
4043

4144
/**

0 commit comments

Comments
 (0)