diff --git a/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/FilesystemTagAdapter.php b/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/FilesystemTagAdapter.php index a29ecf7bafbbb..1335809366091 100644 --- a/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/FilesystemTagAdapter.php +++ b/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/FilesystemTagAdapter.php @@ -180,13 +180,12 @@ public function getIdsMatchingAnyTags(array $tags): array return []; } - $ids = []; + $idsPerTag = []; foreach ($tags as $tag) { - // phpcs:ignore Magento2.Performance.ForeachArrayMerge - $ids = array_merge($ids, $this->getTagIds($tag)); + $idsPerTag[] = $this->getTagIds($tag); } - return array_values(array_unique($ids)); + return array_values(array_unique(array_merge(...$idsPerTag))); } /** @@ -218,7 +217,7 @@ public function getIdsNotMatchingTags(array $tags): array */ private function getAllIds(): array { - $allIds = []; + $idsPerTag = []; $tagFiles = glob($this->tagDirectory . '*'); if ($tagFiles === false) { @@ -227,14 +226,11 @@ private function getAllIds(): array foreach ($tagFiles as $file) { if (is_file($file)) { - $tag = basename($file); - $ids = $this->getTagIds($tag); - // phpcs:ignore Magento2.Performance.ForeachArrayMerge - $allIds = array_merge($allIds, $ids); + $idsPerTag[] = $this->getTagIds(basename($file)); } } - return array_values(array_unique($allIds)); + return array_values(array_unique(array_merge(...$idsPerTag))); } /** diff --git a/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/RedisTagAdapter.php b/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/RedisTagAdapter.php index dc3f9f4433e7a..a725fc4f9e06a 100644 --- a/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/RedisTagAdapter.php +++ b/lib/internal/Magento/Framework/Cache/Frontend/Adapter/SymfonyAdapters/RedisTagAdapter.php @@ -408,19 +408,16 @@ public function getIdsMatchingAnyTags(array $tags): array // Matches Zend's implementation to prevent Redis slowdowns // @see vendor/colinmollenhour/cache-backend-redis/Cm/Cache/Backend/Redis.php line 777-778 if (count($tags) > self::SUNION_CHUNK_SIZE) { - $allIds = []; + $idsPerChunk = []; $chunks = array_chunk($tags, self::SUNION_CHUNK_SIZE); foreach ($chunks as $chunk) { $tagKeys = array_map([$this, 'getTagKey'], $chunk); $chunkIds = $this->redis->sUnion($tagKeys); - $chunkIds = is_array($chunkIds) ? $chunkIds : []; - - // phpcs:ignore Magento2.Performance.ForeachArrayMerge - $allIds = array_merge($allIds, $chunkIds); + $idsPerChunk[] = is_array($chunkIds) ? $chunkIds : []; } - return array_unique($allIds); + return array_unique(array_merge(...$idsPerChunk)); } $tagKeys = array_map([$this, 'getTagKey'], $tags);