Ejemplo n.º 1
0
 private function interactionLoop($listAnsPoint, $idAnswer, $point, $level = 2)
 {
     $interactions = Interaction::where('id_answer_from', $idAnswer)->get();
     foreach ($interactions as $in) {
         $idAnsTo = $in->id_answer_to;
         $ansPointTo =& $listAnsPoint[$idAnsTo];
         $hasUpdatePoint = false;
         try {
             if (count($ansPointTo['interactions']) == 0) {
                 if (!$ansPointTo['level'] || $ansPointTo['level'] > $level) {
                     jumpLevel:
                     $ansPointTo['point'] = $point * $in->point;
                     $ansPointTo['level'] = $level;
                     $ansPointTo['interactions'] = [$point, $in->point];
                     $hasUpdatePoint = true;
                 }
             } else {
                 if ($ansPointTo['level'] == $level) {
                     $ansPointTo['interactions'][] = [$point, $in->point];
                     $sumPoint = 0;
                     $sumInter = 0;
                     foreach ($ansPointTo['interactions'] as $interPoint) {
                         $sumPoint += $interPoint[0] * $interPoint[1];
                         $sumInter += $interPoint[1];
                     }
                     $ansPointTo['point'] = $sumPoint / $sumInter;
                     $hasUpdatePoint = true;
                 } else {
                     if ($ansPointTo['level'] > $level) {
                         goto jumpLevel;
                     }
                 }
             }
         } catch (Exception $e) {
         }
         if ($hasUpdatePoint) {
             $listAnsPoint = $this->interactionLoop($listAnsPoint, $idAnsTo, $ansPointTo['point'], $level + 1);
         }
     }
     return $listAnsPoint;
 }