PHP过滤1个网址的数组

时间:2011-04-02 17:57:15

标签: php regex arrays web-scraping

我创建了一个脚本,它创建了一个从页面中抓取的url数组,我想只过滤掉1个特定url的数组。 该阵列目前看起来像这样:

Array
(
    [0] => index.jsp
    [1] => feedback.jsp
    [2] => faq.jsp
    [3] => donate.jsp
    [4] => contact.jsp
    [5] => widgetmaker.jsp
    [11] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [12] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [13] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [14] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [15] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
)

我想要它做的是抓住其中一个“http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml。 php“链接。我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果我理解正确,您只想获得完全限定(绝对)的网址:

$filtered = array_filter($urls, function($url) {
    if (strpos($url, 'http://') === 0) return true;
    return false;
});

如果您同时需要httphttps网址:

$filtered = array_filter($urls, function($url) {
    if (preg_match('#^https?://#', $url)) return true;
    return false;
});

如果您只想要完全匹配:

$filtered = array_filter($urls, function($url) {
    if ($url == 'http://full/url/goes/here') return true;
    return false;
});

如果您只想获得第一个:

$url = $filtered[0];

答案 1 :(得分:0)

我认为理想会优化脚本以捕获一个链接。您知道应该是最终URL的标准吗?

理想情况下,恕我直言,使用regular expression,或者,如果可能的话,使用strpos查找特定字符串,效率更高。

答案 2 :(得分:0)

如果我理解正确,您要么获取网址 - 如果它存在于数组中 - 或者NULL。这个PHP代码可以做到这一点:

function get_url_if_present($wanted, $array) {
     return array_keys($array, $wanted) ? $wanted : NULL;
}

...其中$wanted是您在$array中搜索的网址,返回值是带有找到的网址的字符串(如果它存在于数组中),否则{{1 }}

您可以这样调用此函数:

NULL