2014-10-31 4 views
1

Это код, который я написал до сих пор:Как удалить значения из массива?

foreach ($link_body as $key => $unfinished_link) 
{ 
    #further Remove non ad links 
    if (stristr($unfinished_link, "inactive" OR "nofollow") === TRUE) 
    { 
     unset($link_body[$key]); 
    } 

    echo "<font color='#FFFFFF' size='16'>$unfinished_link</font><br>"; 
} 

Я не получаю никаких сообщений об ошибках, но я продолжаю получать результаты, которые выглядят следующим образом:

/cars/" /> 
/cars/"> 
/cars/" class="inactive">(not what I wanted) 
/cars/" class="inactive">(not what I wanted) 
/cars/" class="inactive">(not what I wanted) 
/cars/" rel="nofollow">(not what I wanted) 
/cars/?layout=gallery" rel="nofollow">(not what I wanted) 
/cars/2001-ford-escort-great-condition/1235588">(IS what I wanted) 

Где я Мессинг здесь ребята? Thx

+0

' "неактивного" ИЛИ«NoFollow «Это». Вы не можете этого сделать. – naththedeveloper

+0

Вам нужно сделать 'if (stristr ($ unfinished_link," inactive ") || stristr ($ unfinished_link," nofollow ")) {...}' – naththedeveloper

+0

Я удалил OR и просто оставил «неактивным» .. .получая тот же результат – tommyg

ответ

1

Если вы пытаетесь найти строку внутри что, может быть, вы indend использовать stripos вместо:

foreach ($link_body as $key => $unfinished_link) { 
    // further Remove non ad links 
    if(
     stripos($unfinished_link, 'inactive') !== false || 
     stripos($unfinished_link, 'nofollow') !== false 
    ) { 
     unset($link_body[$key]); 

    } else { 
     echo "<font color='#FFFFFF' size='16'>$unfinished_link</font><br>"; 
     // make sure your background is not white, or else your text will not be seen, at least on the white screen 
    } 
} 

Если это HTML разметка, рассмотреть возможность использования HTML-парсер вместо этого, DOMDocument в частности, и искать то, что атрибуты:

$rel = $node->getAttribute('rel'); // or 
$class = $node->getAttribute('class'); 
+0

@tommyg рад, что это помогло – Ghost

0

Насколько мне известно, вы не можете комбинировать параметры так, как вы пытаетесь здесь:

if(stristr($unfinished_link, "inactive" OR "nofollow") === TRUE) 

Вместо этого, вы можете заменить

if(stristr($unfinished_link, "nofollow") === TRUE) || stristr($unfinished_link, "inactive") === TRUE) 
1

Вы вторят переменную $ unfinished_link, что он отличается, что $ link_body [$ ключ]. OK, значения тех же, прежде чем задан $ link_body [$ ключа], но это, как вы делаете:

$a=1; 
$b=1; 
unset($a); 
echo $b; 

Конечно, этот код будет повторить номер один, потому что я отключенный переменный и эха другого , Также неверно условие If.

+0

ok @Serpes Я повторил $ ​​link_body [$ key], но теперь Im получает неопределенную ошибку смещения. – tommyg

+0

Obviusly. Если вы отмените его, вы не сможете его повторить. Или вы повторяете его в выражении else или используете другой оператор if: if (isset ($ link_body [$ key])) – Serpes

+0

Im довольно медленно, человек. Спасибо за вашу помощь @Serpes – tommyg

1

Не удаляйте элемент массива внутри Еогеаспа заявления Помните элементы для удаления в Еогеаспе, удалять их после Еогеаспа:

$elements_to_delete = {}; 
foreach ($link_body as $key => $unfinished_link) 
{ 

    if(stristr($unfinished_link, "inactive" OR "nofollow") === TRUE) { 

     $elements_to_delete.push($key); 
    } 
} 

// removing elements after foreach complete 
foreach($key in $elements_to_delete){ 
    $link_body[$key]; 
} 
1

Использования array_filter:

function filterLink($link) { 
return stripos($unfinished_link, 'inactive') === false && 
     stripos($unfinished_link, 'nofollow') === false 
} 

$unfinished_link = array_filter($unfinished_link, "filterLInk") 
Смежные вопросы