За последние 24 часа нас посетили 17073 программиста и 1835 роботов. Сейчас ищут 1675 программистов ...

Удалить все стоп-слова

Тема в разделе "PHP для новичков", создана пользователем segazav, 14 сен 2015.

  1. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Всем привет!

    Удаляю из массива стоп-слова, но если в массиве встречаются два и более стоп-слов, то удаляется только одно.
    Как это исправить?

    Код (PHP):
    1. $p = array('бу','и', 'в', 'на', 'под', 'над', 'из', 'с', 'по', 'о', 'об', 'обо', 'что', 'как', 'все', 'она', 'так', 'его', 'только', 'мне', 'мы', 'ты', 'вы', 'было', 'вот', 'меня', 'еще', 'нет', 'ему', 'теперь', 'когда', 'даже', 'вдруг', 'если', 'уже', 'или', 'быть', 'был', 'него', 'вас', 'нибудь', 'опять', 'вам', 'ведь', 'там', 'потом', 'себя', 'может', 'они', 'тут', 'где', 'есть', 'надо', 'ней', 'тебя', 'чем', 'была', 'сам', 'чтоб', 'без', 'будто', 'чего', 'раз', 'тоже', 'себе', 'будет', 'тогда', 'кто', 'этот', 'того', 'потому', 'этого', 'какой', 'ним', 'этом', 'почти', 'мой', 'тем', 'чтобы', 'нее', 'были', 'куда', 'зачем', 'всех', 'можно', 'при', 'другой', 'хоть', 'после', 'над', 'больше', 'тот', 'через', 'эти', 'нас', 'про', 'них', 'какая','много', 'разве', 'эту', 'моя', 'свою', 'этой', 'перед', 'чуть', 'том', 'такой', 'более', 'всю', 'объявления', 'объявление', 'объявлений','из-за','коей', 'где', 'когда', 'чей', 'кем'); // удаляем из массива не нужные слова и предлоги
    2.  
    3. for ($i=0; $i<count($arr_slova1); $i++)
    4. {
    5. if(in_array($arr_slova1[$i], $p))
    6. {
    7. unset($arr_slova1[$i]);
    8. }
    9. }
    10.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Код (PHP):
    1. if(in_array($arr_slova1[$i], $p))
    2. {
    3. unset($arr_slova1[$i]);
    4. } 
    заменить на
    Код (PHP):
    1. while(in_array($arr_slova1[$i], $p))
    2. {
    3. unset($arr_slova1[$i]);
    4. } 
     
  3. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Спасибо, но последнее слово все равно остается.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Да, потому что значение count() уменьшается после каждого удаления, а ключи элементов не меняются. Т.е. если было 100 слов и мы удалили 40-е, 50-е и 60-е, count() вернет число 97, а индекс последнего слова как был 99, так и останется.
    Соответственно, следует сделать так
    Код (Text):
    1. $count = count($arr_slova);
    2. for ($i=0; $i<$count; $i++) {
     
  5. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Да, теперь все отлично!
    Огромное спасибо вам!!!