如何在PHP中选择字符串的某个部分?

时间:2015-07-21 15:55:19

标签: php

我有一系列网址。网址类似于:

https://maps.googleapis.com/maps/api/place/details/json?placeid= $ place_id&安培;键= myAPIkey

$place_id是一个在每个网址中都有变化的变量。 我希望能够只选择这部分网址。

因此,当我遍历URL时,我希望它提取我正在使用的URL的那部分,并将其分配给我可以在我的代码中使用的变量($place)。我查看了strpos()和/或substr(),但我不知道如何使用它们,因为$place_id每次都会更改。我认为$place_id的长度总是相同的,但我不是100%肯定的,所以一个适用于不同长度的解决方案会更好。

或者,我已经在数组中有多个$ place_ids。我正在使用

生成URL数组
foreach ($place_ids as $place_id) {
    array_push(
        $urls,
        "https://maps.googleapis.com/maps/api/place/details/json?placeid=$place_id&key=myAPIkey"
    );
}

我正在使用

foreach ($urls as $url){} 

循环遍历此数组。如果有一种方法我可以通过某种检查或使用它们在数组中的位置来检查以确保$place_id的值与URL的值一致。

如果有任何不正确之处,我很抱歉,如果有任何问题我可以回答,或者我可以提出改善问题的方法,我很乐意。

2 个答案:

答案 0 :(得分:4)

由于您在此处理网址,因此您可能希望使用PHP的内置帮助程序parse_url()parse_str()

例如,您可以使用parse_url分隔GET参数,然后使用parse_str将每个参数提取到数组中:

$url = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=<arg1>&key=<arg2>';
$args = [];
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $args);
// args => ["placeid" => "<arg1>", "key" => "<arg2>"]

答案 1 :(得分:0)

正则表达式将

$match = array();
$url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=346758236546&key=myAPIkey";
preg_match('/[?&]placeid=([^&]+)(?:$|.*)/', $url, $match);
var_dump($match[1]); // string(12) "346758236546"