arse_str($query, $params); $paramName = trim($template, '?={id}'); $displayId = isset($params[$paramName]) ? $params[$paramName] : null; } elseif (strpos($template, '?') !== false) { $query = parse_url($requestUri, PHP_URL_QUERY); parse_str($query, $params); $queryPart = substr($template, strpos($template, '?') + 1); if (preg_match('/(\w+)=\{id\}/', $queryPart, $matches)) { $paramName = $matches[1]; $displayId = isset($params[$paramName]) ? $params[$paramName] : null; } if ($displayId === null) { $path = parse_url($requestUri, PHP_URL_PATH); $segments = explode('/', trim($path, '/')); $pathPart = substr($template, 0, strpos($template, '?')); $pathTemplateSegments = explode('/', $pathPart); foreach ($pathTemplateSegments as $index => $segment) { if ($segment === '{id}' && isset($segments[$index])) { $displayId = $segments[$index]; break; } } if ($displayId === null && count($segments) > 1) { $lastSegment = end($segments); if (is_numeric($lastSegment)) { $displayId = $lastSegment; } } } } else { $path = parse_url($requestUri, PHP_URL_PATH); $segments = explode('/', trim($path, '/')); $templateSegments = explode('/', $template); if (strpos($template, '{title}') !== false) { foreach ($templateSegments as $index => $segment) { if ($segment === '{id}' && isset($segments[$index])) { $displayId = $segments[$index]; break; } } } else { foreach ($templateSegments as $index => $segment) { if ($segment === '{id}' && isset($segments[$index])) { $displayId = $segments[$index]; break; } } } if ($displayId === null) { $query = parse_url($requestUri, PHP_URL_QUERY); if ($query && strpos($query, 'shopdetail/') === 0) { $queryPath = trim($query, '/'); $querySegments = explode('/', $queryPath); $shopdetailIndex = array_search('shopdetail', $querySegments); if ($shopdetailIndex !== false && isset($querySegments[$shopdetailIndex + 2])) { $displayId = end($querySegments); } } } } if ($displayId !== null && is_numeric($displayId)) { return $displayId - ID_OFFSET; } return null; } }