如何使用preg_match或任何其他方法获取值

时间:2018-01-10 11:11:53

标签: php

我正在尝试创建一个函数,例如,我希望获取不同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个字符

1 个答案:

答案 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;
    }
}