/** * @param Table $compare * @return float */ protected function getIndexSimilarityPercentage(Table $compare) { $indexCount = count($this->indexes); $targetIndexCount = count($compare->indexes); if ($indexCount < $targetIndexCount) { $indexCount = $targetIndexCount; } if ($indexCount === 0) { return 50; } $sharedIndexes = 0; /** @var Index $idx */ foreach ($this->indexes as $idxName => $idx) { $hasIndex = $compare->hasIndex($idxName); if ($hasIndex) { /** @var Index $compareIdx */ $compareIdx = $compare->indexes[$idxName]; foreach ($idx->getFields() as $idxField) { if (!$compareIdx->containsField($idxField)) { $hasIndex /= 2; } } foreach ($compareIdx->getFields as $idxField) { if (!$idx->containsField($idxField)) { $hasIndex /= 2; } } } $sharedIndexes += $hasIndex; } return round($sharedIndexes / $indexCount * 100, 2); }