За последние 24 часа нас посетили 113464 программиста и 2313 роботов. Сейчас ищут 1456 программистов ...

Строковая функция не совсем корректна.

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

  1. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Получаю массив. Нужна проверить вхождение в строку определенного слова.

    Проверяю индексы ( $key) т.к. они являются словами.


    Если слово входит, то тогда не выводить его.

    Пользуюсь strpos.


    Код (Text):
    1.  
    2.  
    3. foreach($n as $key=>$value)
    4. {
    5. if(strlen($key)>=3
    6. and $value>=4
    7. and !strpos(strtolower($name),strtolower($key))
    8. and !strpos(strtolower($words),strtolower($key)))
    9. {
    10. echo $key;
    11. }
    12. }

    В результате например :

    если $name=Black Sabbath и $key=Black ---- то слово Black выведется ...не понимаю почему. Он же с нулевой позиции ищет !! ???


    Помогите пожалуйста.

    Та же проблема была с

    $words=' that, there, were, this, when, they, they, some, have, their, some, just, very, said, more, made
    ';
    если $key=that-----
    Выводил слово that ,хотя не должен. Помог отступ в начале строки.



    Ваши мысли ??))
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    не ноль равно true
     
  3. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Да.))

    Читал, читал..видать слишком бегло..

    Ответ тут

    http://php.su/functions/?strpos


    Код (Text):
    1. foreach($n as $key=>$value)
    2. {
    3. if(strlen($key)>=3
    4. and $value>=4
    5. and !strpos(strtolower($words),strtolower($key)))
    6. {
    7. $pos=strpos(strtolower($name),strtolower($key));
    8. if(($pos === false))
    9. {
    10. echo ucfirst(strtolower($name))." ".$key.', ';
    11. }
    12. }
    13. }