public function matches(array $matchers, array $arguments)
{
$pair = each($arguments);
foreach ($matchers as $matcher) {
if ($matcher instanceof WildcardMatcher) {
$matchCount = 0;
$innerMatcher = $matcher->matcher();
while (!empty($pair) && $innerMatcher->matches($pair[1])) {
++$matchCount;
$pair = each($arguments);
}
$maximumArguments = $matcher->maximumArguments();
$isMatch = (null === $maximumArguments || $matchCount <= $maximumArguments) && $matchCount >= $matcher->minimumArguments();
if (!$isMatch) {
return false;
}
continue;
}
if (empty($pair) || !$matcher->matches($pair[1])) {
return false;
} else {
$pair = each($arguments);
}
}
return false === $pair;
}