From fb5580d24e2e0c01712d3fa637d1f2dde4a9619e Mon Sep 17 00:00:00 2001 From: Orzu Ionut Date: Thu, 24 Jun 2021 13:54:38 +0300 Subject: [PATCH] Fix displacing issue --- app/SearchDisplace/SearchAndDisplace.php | 38 +++++++++++++++--------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/app/SearchDisplace/SearchAndDisplace.php b/app/SearchDisplace/SearchAndDisplace.php index 0bb1a68..5537d8b 100644 --- a/app/SearchDisplace/SearchAndDisplace.php +++ b/app/SearchDisplace/SearchAndDisplace.php @@ -43,32 +43,42 @@ class SearchAndDisplace $replacements[$searcher['key']] = $searcher['replace_with']; } - $updatedDocumentContent = ''; - $currentIndex = 0; + $searchers = []; foreach ($searchResult as $searcher => $searcherResults) { $replacementIndexes[$searcher] = []; foreach ($searcherResults as $searcherResult) { - $partialContent = substr($this->documentContent, $currentIndex, $searcherResult['start'] - $currentIndex); + $searchers[$searcherResult['start']] = array_merge($searcherResult, [ + 'searcher' => $searcher + ]); + } + } - $updatedDocumentContent = $updatedDocumentContent . $partialContent; + ksort($searchers); - $start = strlen($updatedDocumentContent); + $updatedDocumentContent = ''; + $currentIndex = 0; + + foreach ($searchers as $start => $searcherItem) { + $partialContent = substr($this->documentContent, $currentIndex, $searcherItem['start'] - $currentIndex); - $updatedDocumentContent = $updatedDocumentContent . $replacements[$searcher]; + $updatedDocumentContent = $updatedDocumentContent . $partialContent; - $end = strlen($updatedDocumentContent) - 1; + $start = strlen($updatedDocumentContent); - if ($start <= $end) { - $replacementIndexes[$searcher][] = [ - 'start' => $start, - 'end' => $end, - ]; - } + $updatedDocumentContent = $updatedDocumentContent . $replacements[$searcherItem['searcher']]; - $currentIndex = $searcherResult['end'] + 1; + $end = strlen($updatedDocumentContent) - 1; + + if ($start <= $end) { + $replacementIndexes[$searcherItem['searcher']][] = [ + 'start' => $start, + 'end' => $end, + ]; } + + $currentIndex = $searcherItem['end'] + 1; } if ($currentIndex < strlen($this->documentContent) - 1) {