private function generateViewParametersArray($vpString)
    {
        $vpString = trim($vpString, '/');
        $viewParameters = array();

        $vpSegments = explode('/', $vpString);
        for ($i = 0, $iMax = count($vpSegments); $i < $iMax; ++$i) {
            if (empty($vpSegments[$i])) {
                continue;
            }

            // View parameter name.
            // We extract it + the value from the following segment (next element in $vpSegments array)
            if ($vpSegments[$i][0] === '(') {
                $paramName = str_replace(array('(', ')'), '', $vpSegments[$i]);
                // A value is present (e.g. /(foo)/bar)
                if (isset($vpSegments[$i + 1])) {
                    $viewParameters[$paramName] = $vpSegments[$i + 1];
                    unset($vpSegments[$i + 1]);
                } else {
                    // No value (e.g. /(foo)) => set it to empty string
                    $viewParameters[$paramName] = '';
                }
            } elseif (isset($paramName)) {
                // Orphan segment (no previous parameter name), e.g. /(foo)/bar/baz
                // Add it to the previous parameter.
                $viewParameters[$paramName] .= '/' . $vpSegments[$i];
            }
        }

        return $viewParameters;
    }