Metabor\Statemachine\Factory\TransitionSelector\OneOrNoneActiveTransition::selectTransition PHP Method

selectTransition() public method

See also: MetaborStd\Statemachine\Factory\TransitionSelectorInterface::selectTransition()
public selectTransition ( Traversable $transitions )
$transitions Traversable
    public function selectTransition(\Traversable $transitions)
    {
        $transitions = iterator_to_array($transitions);
        switch (count($transitions)) {
            case 0:
                return;
            case 1:
                return reset($transitions);
            default:
                throw new \RuntimeException('More than one transition is active!');
        }
    }

Usage Example

 /**
  * @see \MetaborStd\Statemachine\Factory\TransitionSelectorInterface::selectTransition()
  */
 public function selectTransition(\Traversable $transitions)
 {
     $bestTransitions = array();
     $bestScore = -1;
     foreach ($transitions as $transition) {
         $score = $this->calculcateScore($transition);
         if ($score > $bestScore) {
             $bestScore = $score;
             $bestTransitions = array($transition);
         } elseif ($score == $bestScore) {
             $bestTransitions[] = $transition;
         }
     }
     $disctinctSelector = new OneOrNoneActiveTransition();
     return $disctinctSelector->selectTransition(new \ArrayIterator($bestTransitions));
 }
OneOrNoneActiveTransition