2010-03-09 2 views
0

У меня есть массив ссылок и у меня есть еще один массив, который содержит определенные значения я хотел бы, чтобы отфильтровать в списке например:удалить значения из PHP массива

http://www.liquidshredder.co.uk/shop%3Fkw%3Dsurfboards%26fl%3D330343%26ci%3D3889610385%26network%3Ds 
http://www.bournemouth-surfing.co.uk/index.php%3FcPath%3D32 
http://www.stcstores.co.uk/wetsuit-range-sizing--pricing-info-1-w.asp 
http://www.kingofwatersports.com/wetsuit-sale-c227.html 
http://www.uk.best-price.com/search/landing/query/bodyboards/s/google/altk/Surf%2Band/koid/1944273223/ 
http://www.surfinghardware.co.uk/Results.cfm%3Fcategory%3D20%26kw%3Dbodyboards%26fl%3D11407%26ci%3D3326979552%26network%3Ds 
http://www.teste.co.uk/adtrack/baod.html 
http://www.teste.co.uk/bodyboards/ 
www.sandskater.co.uk/ 
www.sandskater.co.uk/bodyboards/+Bodyboards&sa=X&ei=GwSWS-KaGM24rAeF-vCKDA&ved=0CBMQHzAKOAo 
http://www.extremesportstrader.co.uk/buy/water/bodyboarding/ 
www.extremesportstrader.co.uk/buy/water/bodyboarding/+Bodyboards&sa=X&ei=GwSWS-KaGM24rAeF-vCKDA&ved=0CBYQHzALOAo 
www.circle-one.co.uk/+Bodyboards&sa=X&ei=GwSWS-KaGM24rAeF-vCKDA&ved=0CBkQHzAMOAo 
http://www.teste.co.uk/bodyboards/p1 
http://www.teste.co.uk/bodyboards/p2 
http://www.amazon.co.uk/s/%3Fie%3DUTF8%26keywords%3Dbodyboards%26tag%3Dgooghydr-21%26index%3Daps%26hvadid%3D4764625891%26ref%3Dpd_sl_2lyzsfw1ar_e 
http://www.teste.co.uk/bodyboards/p3 
www.extremesportstrader.co.uk/buy/water/ 

и я хотел бы, чтобы удалить все экземпляры "http://www.teste.co.uk"?

я попытался следующий код, но он не работает :(

$remove=array("teste.co.uk","127.0.0.1","localhost","wikipedia.org","gmail.com","answers.yahoo.com"); 

foreach ($list[0] as $key=>$clean) 
{ 
    if (in_array($clean,$remove)) 
    {    
     unset($list[0][$key]); 
    } 

    echo $clean; 
    echo '<br>'; 
} 
+0

Что делает 'print_r ($ список [0])' выглядеть? –

+0

где вы определяете $ list [0] и $ urls? – erenon

+0

@Thomas Ahle: Он отображает все URL-адреса, размещенные в массиве. @erenon: Маленькая ошибка $ urls должна быть очищена. список $ берется из отдельного файла. – LiveEn

ответ

0

in_array ($ чистые, $ удалить) работает только тогда, когда строки совпадают точно. Так что если $ удалить содержит «teste.co. ик»и $ чистые содержат "http://www.teste.co.uk/bodyboards/p3", он возвращает ложь

3

по Сьердо:..

$url = parse_url($clean); 
$host = $url['host']; 

if (in_array($host,$remove)) 
{    
    unset($list[0][$key]); 
} 

Используйте функцию parse_url() для анализа URLs

+0

классный, я не знал эту функцию. +1 – Nacho

0

Если у вас массив $list[0] - это список, который вы напечатали, ваша проблема будет в том, что http://www.teste.co.uk/bodyboards/p1 не находится в array("teste.co.uk","127.0.... Только точная строка "teste.co.uk" есть.

Таким образом, вам нужно сделать, это:

$remove=array("teste.co.uk","127.0.0.1","localhost","wikipedia.org","gmail.com","answers.yahoo.com"); 

foreach ($list[0] as $key=>$url) { 
    // We have to test for each badword individually 
    foreach ($remove as $bad) { 
     // Using this strpos trick, we can test if $bad is a substring of $url 
     if (strpos($url, $bad) !== false) { 
      unset($list[0][$key]); 
      break; 
     } 
    } 
} 
0
for($i=0; $i < count($array); $i++) 
{ 
    //checks for full match 
    if($array[$i] == $key) 
    //use if(strpos($array[$i], $key) !== FALSE) to check for substrings. 
    { 
    array_splice($array, $i, 1) 
    $i--; 
    } 
} 
Смежные вопросы