如何在 URL 中存储第一个 1 字符字母参数的数值?

How to store numeric value of the first 1-character alphabetical parameter in a URL?

我想在会话中存储 URL 中显示的第一个 1 字符字母字符串的值(数字),只要它不是 a

示例,如果访问者到达:

mydomain.com/nice-url/?a=1&p=2&v=3&vt_p=5

那么应该存储的数字是2

(类似于 $_SESSION['number']=2

mydomain.com/nice-url/?a=2&v=7

那么应该存储的数字是7

mydomain.com/nice-url/?z=3&

那么应该存储的数字是3

mydomain.com/nice-url/?a=1&pv=2&s=30&p=5

那么应该存储的数字是30

mydomain.com/nice-url/?a=1&v=z&m=8

那么应该存储的数字是8

我已经将以下代码用于其他用途,因此也许此代码的一部分也可用于此目的:

function unparse_url($parsed_url) {
  $scheme   = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
  $host     = isset($parsed_url['host']) ? $parsed_url['host'] : '';
  $port     = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
  $user     = isset($parsed_url['user']) ? $parsed_url['user'] : '';
  $pass     = isset($parsed_url['pass']) ? ':' . $parsed_url['pass']  : '';
  $pass     = ($user || $pass) ? "$pass@" : '';
  $path     = isset($parsed_url['path']) ? $parsed_url['path'] : '';
  $query    = !empty($parsed_url['query']) ? '?' . trim($parsed_url['query'], '&') : '';
  $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
  return "$scheme$user$pass$host$port$path$query$fragment";
}

function strip_query($url, $query_to_strip) {
  $parsed = parse_url($url);
  $parsed['query'] = preg_replace('/(^|&)'.$query_to_strip.'[^&]*/', '', $parsed['query']);
  return unparse_url($parsed);
}

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

使用parse_urlexplodeis_numeric函数的解决方案:

$url = "mydomain.com/nice-url/?a=1&pv=2&s=30&p=5";
$query_papams = explode("&", parse_url($url, PHP_URL_QUERY));
$number = "not found";

foreach ($query_papams as $p) {
    $pair = explode("=", $p);
    if (strlen($pair[0]) == 1 && $pair[0] !== "a" && is_numeric($pair[1])) {
        $number = $pair[1];
        break;
    }
}

print_r($number);  // 30

您可以使用一个简单的函数来解决这个问题。给你:

    <?php   

        $url1 = "mydomain.com/nice-url/?a=1&p=2&v=3&vt_p=5";
        $url2 = "mydomain.com/nice-url/?a=2&v=7";
        $url3 = "mydomain.com/nice-url/?a=1&pv=2&s=30&p=5";
        $url4 = "mydomain.com/nice-url/?a=1&v=z&m=8";
        $url5 = "mydomain.com/nice-url/?z=3&jk=23";

        function getSavableNumberFromURL($uri){
            $objStripped                = new stdClass();
            $objParsedQuery             = new stdClass();

            if(!stristr($uri, "?")){
                $objStripped->RQ_URI    = $uri;
                $objStripped->QUERY     = null;
            }else{
                $arrSplit               = preg_split("#\?#", $uri);
                $objStripped->RQ_URI    = $arrSplit[0];
                $objStripped->QUERY     = $arrSplit[1];
            }

            $queryString    = $objStripped->QUERY;
            $queryString    = preg_replace("#(^\?)#", "", $queryString);
            $arrSplit       = preg_split("#\&#", $queryString);
            if(!empty($arrSplit) && count($arrSplit)>1 ) {
                foreach ($arrSplit as $queryKVPair) {
                    preg_match("#(.*)(\=)(.*)#", $queryKVPair, $matches);
                    list($fullNull, $key, $null, $value) = $matches;
                    $objParsedQuery->$key = $value;
                }
            }

            foreach($objParsedQuery as $propName=>$propVal){
                if($propName != "a" && strlen($propName) == 1 && is_numeric($propVal)){
                    return $propVal;
                }
            }
            return null;
        }

        $savableNum1 = getSavableNumberFromURL($url1);
        $savableNum2 = getSavableNumberFromURL($url2);
        $savableNum3 = getSavableNumberFromURL($url3);
        $savableNum4 = getSavableNumberFromURL($url4);
        $savableNum5 = getSavableNumberFromURL($url5);

        var_dump($savableNum1);    //DISPLAYS: "2"
        var_dump($savableNum2);    //DISPLAYS: "7"
        var_dump($savableNum3);    //DISPLAYS: "30"
        var_dump($savableNum4);    //DISPLAYS: "8"
        var_dump($savableNum5);    //DISPLAYS: "3"

       // YOU CAN THEN STORE THE VALUES 
       // USING YOUR FAVORITE MECHANISM ($_SESSION) PERHAPS...
       //
       //

测试一下HERE