2016-08-18 241 views
-2

我有一個數組$鏈接包含在它裏面的一些環節,我想刪除所有這些都是從網站出現在$ 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 
) 
+1

你有什麼試過的?你收到了什麼錯誤信息?如果沒有顯示錯誤信息,那麼請發佈您的PHP錯誤日誌。謝謝 –

+0

您可以使用[strpos函數](http://php.net/manual/en/function.strpos.php)檢查字符串是否包含特定子字符串。也使用foreach循環 –

+2

[PHP的:如何從數組中刪除特定元素?]可能的副本(http://stackoverflow.com/questions/2448964/php-how-to-remove-specific-element-from-an-數組) – cteski

回答

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; 
} 
+0

以及如果我想讓它們變爲空白而不是刪除它們,我該怎麼做? – Kaif

+0

@Kaif:要做到這一點''array_map'更適合。但'array_map'作爲'array_filter'只是簡單的'foreach'循環的功能版本,您可以在其中存儲修改或選擇的項目。 –

+0

真棒!!!!!!!!!!!!!!!!!!!!! :D – Kaif

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

    return true; 
}); 
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

+0

非常感謝你:) – Kaif

+0

@Kaif歡迎親愛的,你可以投票回答哪個對你有幫助... –

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) 
+0

非常感謝你:) – Kaif