我正在尝试创建一个函数,例如,我希望获取不同URL的值 这里我有2个网址
http://myurl.com/?a=c&q=ee&jpr=27abdc4365f7f99a3816eb815466c10d&device_id=b2ebd10b-6b63-4949-9c69-c96462df84b5
第二个网址是
http://myurl.com/?a=c&q=ee&m11=78aswq82299938337h7733883392ra
它只有2我现在有更多我需要32字符串的值我应用preg_match的任何方法但它不适用于所有只有相同的东西是值是32个字符
答案 0 :(得分:0)
使用parse_url()
将URL拆分为多个部分(只需要查询字符串),然后将查询字符串传递给parse_str()
以获取各个查询变量及其值:
$url = 'http://myurl.com/?a=c&q=ee&jpr=27abdc4365f7f99a3816eb815466c10d&device_id=b2ebd10b-6b63-4949-9c69-c96462df84b5';
$query = parse_url($url, PHP_URL_QUERY);
$vars = array();
parse_str($query, $vars);
print_r($vars);
输出结果为:
Array
(
[a] => c
[q] => ee
[jpr] => 27abdc4365f7f99a3816eb815466c10d
[device_id] => b2ebd10b-6b63-4949-9c69-c96462df84b5
)
如果您需要的值并非始终与同一个键相关联(此示例中的键为jpr
,但在另一个示例中为m11
),您可以使用array_filter()
来
只保留符合条件的条目(例如,它们的值为32
且与长度为3
的密钥相关联):
$filtered = array_filter(
$vars,
function($val, $key) {
return strlen($val) == 32 && strlen($key) == 3;
},
ARRAY_FILTER_USE_BOTH
);
print_r($filtered);
输出:
Array
(
[jpr] => 27abdc4365f7f99a3816eb815466c10d
)
parameter的第三个array_filter()
仅适用于PHP 5.6及更高版本。
如果您遇到旧版本,则无法检查过滤器回调函数中的密钥。如果这对您来说很重要,那么即使使用较少的代码,一个简单的foreach
循环也可以完成工作:
$filtered = array();
foreach ($vars as $key => $val) {
if (strlen($val) == 32 && strlen($key) == 3) {
$filtered[$key] = $val;
}
}