Example #1
0
 /**
  * @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);
 }