За последние 24 часа нас посетили 23168 программистов и 1660 роботов. Сейчас ищет 831 программист ...

Как правильно пользоваться функцией strpos()

Тема в разделе "PHP для новичков", создана пользователем блудный сын, 28 ноя 2008.

  1. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Подскажите, как правильно пользоваться функцией strpos(). Делаю поиск по тексту с ее помощью, но часто получается что найденное оказывается на перовом месте и получается что эта функция возвращает 0 и мое вот это условие дает сбой и пропускает это слово:
    PHP:
    1. if (strpos($word, "слово")<> "")
    2. {
    3. echo $word;
    4. }
    Как правильно записать условие использующее эту функцию, чтобы оно выдавало результат даже если то что ищу в начале строки?
     
  2. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
  3. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Странно, а разве в дистрибутиве PHP не идет php_manual_en.chm (ну или русский) ?
     
  4. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Так как-же все таки? Так:
    PHP:
    1. if (strpos($word, "слово") === false)
    2. {
    3. echo $word;
    4. }
    или так:
    PHP:
    1. if (strpos($word, "слово") != FALSE)
    2. {
    3. echo $word;
    4. }
    (На словах нужно такое: Если "слово" в переменной $word есть, то печатаем переменную $word)
     
  5. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1.  
    2. <?php
    3. $s = "word";
    4. if ( strpos($s, "word") !== FALSE) echo $s;
    5. ?>
    6.  
     
  6. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    О, это работает! А то мне неудачные книги по РНР попались. Многие нюансы в них не написаны. Приходилось городить огород с оператором ELSE. Недавно в мануале вычитал, что там в таких но обратных случаях три равно подряд нужно применять. А в моем случае пробовал ставить !=== - это не работало. Можете объяснить, почему в прямом случае нужно три равно ставить ===, а в обратном одно равно отбрасывается и остается !== ?
     
  7. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    блудный сын
    для сокращения кода на 1 байт ;)
     
  8. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Мда... Если это единственная причина, то это идиотизм :(
     
  9. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    блудный сын
    Есть == и !=
    Есть === и !==

    Где тут раздражитель ? ;)

    Весь синтаксис описан в мануале.
     
  10. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Для меня как-то непривычно такое обозначение. Но если это все-таки не экономия байта, а именно так и задумывалсь, что вместо = в обратном случае ставится ! - то все в порядке :)
     
  11. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    А есть еще = и !, правда, они совсем для другого... ;)
     
  12. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А еще есть !FALSE, но:
    Код (Text):
    1. if (strpos($word, "слово") !FALSE)
    выдает ошибку, в то время как:
    Код (Text):
    1. if (strpos($word, "слово") == !FALSE)
    работает. И попробуй пойми все это :)
     
  13. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    strpos($word, "слово") возращает позицию найденого совпадения, возращает false если нет совпадения.
    Позиция может быть нулевой.
    0 == false, в тоже время 0 !== false.
    Следует делать строгую проверку.
    PHP:
    1. <?
    2. if (strpos($word, 'слово') !== false) {
    3.    // есть совпадение
    4. }
    5.  
     
  14. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Ti, спасибо за объяснение! Я этого не знал и не знал как его правильно записывать. Пытался вот так !=== но сами понимаете это не работало. Приходилось выкручиваться и дополнительно оператор ELSE использовать. Но теперь уже буду делать правильно! :)