documentContent = $documentContent; $this->info = $info; } public function execute() { $searchResult = $this->search(); return $this->displace($searchResult); } /** * * @return mixed * @throws \Exception */ protected function search() { $searcher = new Searcher($this->info['searchers'], $this->documentContent); return $searcher->execute(); } protected function displace($searchResult) { $replacements = []; foreach ($this->info['searchers'] as $searcher) { $replacements[$searcher['key']] = $searcher['replace_with']; } $updatedDocumentContent = ''; $currentIndex = 0; foreach ($searchResult as $item) { $partialContent = substr($this->documentContent, $currentIndex, $item['start'] - $currentIndex); $updatedDocumentContent = $updatedDocumentContent . $partialContent; $updatedDocumentContent = $updatedDocumentContent . $replacements[$item['dim']]; $currentIndex = $item['end']; } if ($currentIndex < strlen($this->documentContent) - 1) { $updatedDocumentContent = $updatedDocumentContent . substr($this->documentContent, $currentIndex); } return $updatedDocumentContent; } }