protected function _buildVariables($values)
    {
        $variables = [];
        $parser = $this->_classes['parser'];

        $i = 1;
        foreach ($this->variables() as $name => $pattern) {
            if (!isset($values[$i])) {
                $variables[$name] = !$pattern ? null : [];
                continue;
            }
            if (!$pattern) {
                $variables[$name] = $values[$i] ?: null;
            } else {
                $token = $parser::tokenize($pattern, '/');
                $rule = $parser::compile($token);
                if (preg_match_all('~' . $rule[0] . '~', $values[$i], $parts)) {
                    foreach ($parts[1] as $value) {
                        if (strpos($value, '/') !== false) {
                            $variables[$name][] = explode('/', $value);
                        } else {
                            $variables[$name][] = $value;
                        }
                    }
                } else {
                    $variables[$name] = [];
                }
            }
            $i++;
        }
        return $variables;
    }
protected function _buildVariables($values)
    {
        $variables = [];
        $parser = $this->_classes['parser'];

        $i = 1;
        foreach ($this->variables() as $name => $pattern) {
            if (!isset($values[$i])) {
                $variables[$name] = !$pattern ? null : [];
                continue;
            }
            if (!$pattern) {
                $variables[$name] = $values[$i] ?: null;
            } else {
                $token = $parser::tokenize($pattern, '/');
                $rule = $parser::compile($token);
                if (preg_match_all('~' . $rule[0] . '~', $values[$i], $parts)) {
                    foreach ($parts[1] as $value) {
                        if (strpos($value, '/') !== false) {
                            $variables[$name][] = explode('/', $value);
                        } else {
                            $variables[$name][] = $value;
                        }
                    }
                } else {
                    $variables[$name] = [];
                }
            }
            $i++;
        }
        return $variables;
    }
protected function _buildVariables ( $ values ) { $ variables = [ ] ; $ parser = $ this -> _classes [ 'parser' ] ; $ i = 1 ; foreach ( $ this -> variables ( ) as $ name => $ pattern ) { if ( ! isset ( $ values [ $ i ] ) ) { $ variables [ $ name ] = ! $ pattern ? null : [ ] ; continue ; } if ( ! $ pattern ) { $ variables [ $ name ] = $ values [ $ i ] ? : null ; } else { $ token = $ parser :: tokenize ( $ pattern , '/' ) ; $ rule = $ parser :: compile ( $ token ) ; if ( preg_match_all ( '~' . $ rule [ 0 ] . '~' , $ values [ $ i ] , $ parts ) ) { foreach ( $ parts [ 1 ] as $ value ) { if ( strpos ( $ value , '/' ) !== false ) { $ variables [ $ name ] [ ] = explode ( '/' , $ value ) ; } else { $ variables [ $ name ] [ ] = $ value ; } } } else { $ variables [ $ name ] = [ ] ; } } $ i ++ ; } return $ variables ; }
Combines route's variables names with the regex matched route's values.

@param  array $varNames The variable names array with their corresponding pattern segment when applicable.
@param  array $values   The matched values.
@return array           The route's variables.
Combines route s variables names with the regex matched route s values .