PHP数组搜索忽略可能的第一个匹配

时间:2014-03-31 14:06:49

标签: php explode

链接是:http://www.imdb.com/title/tt1840309/?ref_=hm_cht_t1 我正在使用

$sprangd = explode('/',$imdb_url); echo $sprangd[4]; $imdb = array_search('tt', $sprangd);

现在。但它会返回http: 如果它找到http:或https:它需要继续搜索。我正在寻找这部分字符串:tt1840309 我该怎么办?我这样做是因为链接可能是www.imdb.com/title/tt1840309/?ref_=hm_cht_t1有时候,有时只有tt1840309这就是为什么我不能通过设置数字回显数组。因为它会是动态的。

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用正则表达式。这种方式你不在乎是从www,http或https开始的网址。

当url只是没有url其他部分的标题id时,正则表达式将返回空数组:

<?php

$url = 'http://www.imdb.com/title/tt1840309/?ref_=hm_cht_t1';
preg_match("/title\/(?P<titleId>[\w\d]+)\//", $url, $match);
echo isset($match['titleId']) ? $match['titleId'] : $url;

答案 1 :(得分:0)

使用parse_url()preg_match()的组合:

$parsed_url = parse_url('http://www.imdb.com/title/tt1840309/?ref_=hm_cht_t1');
preg_match('/\/title\/(?P<title>[a-zA-Z0-9]+)\/[.]*/', $parsed_url['path'], $matches);
var_dump($matches['title']);

将返回:tt1840309

答案 2 :(得分:0)

为什么要使用正则表达式?只需解析url,然后获取url的路径,然后在其中搜索tt中的元素,过滤数组,弹出它

$sprangd = parse_url('http://www.imdb.com/title/tt1840309/?ref_=hm_cht_t1');
$sprangd_path = explode('/', $sprangd['path']);
$imdb = array_pop(array_filter(array_map(function($item){ if(strpos($item, 'tt') !== false){ return $item;} },$sprangd_path)));