从包含特定字符串关键字的数组中删

时间:2016-08-18 13:29:43

标签: php arrays regex preg-replace

我有一个数组 $ link ,其中包含一些链接,我想删除所有来自 $ Blocklinks

中的网站的链接
 $links=array(
'http://ckfht.ca/sultan/files/2016/',
'http://dl1.uploadplus.net/dl2/2016/Sultan.2016/',
'http://www.google.com',
'http://subindomovie.xyz/film/indexof-sultan-720p'
'http://subindomovie.xyz/film/sultan-720-p'
'http://www.liveaccountbook.com/sultan/'


);

$Blocklinks=array(
    'subindomovie.xyz',
    'www.liveaccountbook.com'
);
  /* remove urls containing link from $Blocklinks .. What should i do here??*/
$links=deletelinks($links,$Blocklinks);

/*  output */
print_r($links);

output I want
------
Array
(
    [0] => http://ckfht.ca/sultan/files/2016/
    [1] => http://dl1.uploadplus.net/dl2/2016/Sultan.2016/
    [2] => http://www.google.com
)

4 个答案:

答案 0 :(得分:4)

如果您只需按主机名过滤网址,则可以这样做:

$result = array_filter($links, function ($i) use ($Blocklinks) {
    return !in_array(parse_url($i, PHP_URL_HOST), $Blocklinks); });

如果您想用空字符串替换网址:

功能方式:

$result = array_map(function ($i) use ($Blocklinks) {
    return in_array(parse_url($i, PHP_URL_HOST), $Blocklinks) ? '' : $i;
}, $links);

程序方式:

$result = [];
foreach($links as $link) {
    $result = in_array(parse_url($link, PHP_URL_HOST), $Blocklinks) ? '' : $link;
}

答案 1 :(得分:1)

$links = array_filter($links, function ($link) use ($Blocklinks) {
    foreach ($Blocklinks as $block) {
        if (strstr($link, $block) !== false) {
            return false;
        }
    }

    return true;
});

答案 2 :(得分:0)

deletelinks()功能...

中使用此代码
function deletelinks($links,$Blocklinks)
{
    foreach($links as $key => $link)
    {
        foreach($Blocklinks as $bLink)
        {
            if (strpos($link,$bLink) !== false) {
                unset($links[$key]); 
            }   
        }
    }
    return $links;
}

这会让你回复:

Array
(
    [0] => http://ckfht.ca/sultan/files/2016/
    [1] => http://dl1.uploadplus.net/dl2/2016/Sultan.2016/
    [2] => http://www.google.com
)

现场示例:CLICK HERE

答案 3 :(得分:0)

  

似乎你正在思考一个函数的行,这个函数会删除链接,因此deletelinks($links, $Blocklinks)。也许下面的功能派上用场......你也可以try it out here

<?php

    $links      = array(
                'http://ckfht.ca/sultan/files/2016/',
                'http://dl1.uploadplus.net/dl2/2016/Sultan.2016/',
                'http://www.google.com',
                'http://subindomovie.xyz/film/indexof-sultan-720p',
                'http://subindomovie.xyz/film/sultan-720-p',
                'http://www.liveaccountbook.com/sultan/',
                );

    $blockLinks = array(
                'subindomovie.xyz',
                'www.liveaccountbook.com',
    );

    $newLinks   = deleteLinks($links, $blockLinks);
    var_dump($newLinks);

    function deleteLinks($links, $blockLinks){
        foreach($links as $key=>$link){
            foreach($blockLinks as $index=>$blockLink){
                if(stristr($link, $blockLink)){
                    unset($links[$key]);
                }
            }
        }
        return $links;
    }

    // THE var_dump($newLinks) ABOVE WOULD PRODUCE SOMETHING LIKE:

    array (size=3)
      0 => string 'http://ckfht.ca/sultan/files/2016/' (length=34)
      1 => string 'http://dl1.uploadplus.net/dl2/2016/Sultan.2016/' (length=47)
      2 => string 'http://www.google.com' (length=21)