Php 从变量中提取数字

Php 从变量中提取数字,php,Php,我有这个字符串: $guid = 'http://www.test.com/?p=34'; 如何从字符串中提取get varp(34)的值,并使$guid2='34'?如果34是查询字符串中唯一的数字,您也可以使用 $query = parse_url($url, PHP_URL_QUERY); parse_str($query, $vars); $guid2 = $vars['p']; echo filter_var('http://www.test.com/?p=34', FILTER_

我有这个字符串:

$guid = 'http://www.test.com/?p=34';

如何从字符串中提取get var
p
(34)的值,并使
$guid2='34'

如果34是查询字符串中唯一的数字,您也可以使用

$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $vars);
$guid2 = $vars['p'];
echo filter_var('http://www.test.com/?p=34', FILTER_SANITIZE_NUMBER_INT); // 34
这将从URL字符串中删除任何不是数字的内容。但是,当URL中有其他数字时,此操作将失败。如果要提取查询字符串的p参数的值,则最可靠的方法是A。

A可能是获取该变量的最快方法,如果它始终是一个数字,下面的代码将起作用。虽然这是从URL获取信息的一般方法,但它对特定的URL做了大量工作,这非常简单,如果不改变的话,可以简单地处理

$guid = 'http://www.test.com/?p=34';
$guid2 = preg_replace("/^.*[&?;]p=(\d+).*$/", "$1", $guid);
更新

请注意,如果无法保证URL中包含变量
p=
,则需要使用match,因为preg_replace()最终将不匹配并返回整个字符串

$guid = 'http://www.test.com/?p=34';
$matches = array();
if (preg_match("/^.*[&?;]p=(\d+).*$/", $guid, $matches)) {
    $guid2 = $matches[1];
} else {
    $guid2 = false;
}

那是WordPress。在单个post页面上,您可以使用get_the_ID()函数(内置WP,仅在循环中使用)

为了更安全:

if(isset($_GET['p']) && $_GET['p'] != ''){
    $guid2 = $_GET['p'];
}
else{
    $guid2 = '1'; //Home page number
}

这可能包括在
p
之前检查
[?&;]
,以防止
notp=12
。如果
p
是第一个参数,则它将是
?p=
,如果它不是第一个参数,则它将是
&p=
,或者,当对符号进行编码时,
&;p=
@Gordon很好,我忽略了这个案例。我要修改我的答案。
if(isset($_GET['p']) && $_GET['p'] != ''){
    $guid2 = $_GET['p'];
}
else{
    $guid2 = '1'; //Home page number
}