Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос на счет работы mb_strpos и FALSE
Форумы портала PHP.SU » » Вопросы новичков » Вопрос на счет работы mb_strpos и FALSE

Страниц (1): [1]
 

1. Webtest - 12 Сентября, 2014 - 10:52:22 - перейти к сообщению
Здравствуйте.

Просто интересно, но почему если я делаю проверку:
PHP:
скопировать код в буфер обмена
  1. if (mb_stripos($titles[$key]['title'], $search) != FALSE) {
  2.         echo mb_stripos($titles[$key]['title'], $search);
  3. }

если слово стоит в 0 позиции, то оно не выдает ничего, поэтому приходится делать такую проверку:
PHP:
скопировать код в буфер обмена
  1. if (mb_stripos($titles[$key]['title'], $search) === FALSE) {
  2. } else {
  3.         echo mb_stripos($titles[$key]['title'], $search);
  4. }

Все ли я правильно делаю?
2. RickMan - 12 Сентября, 2014 - 10:57:00 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.     if (mb_stripos($titles[$key]['title'], $search) !== FALSE) {
  2.             echo mb_stripos($titles[$key]['title'], $search);
  3.     }


Делать надо так... Дело в том что в строке идексация эллементов идет с 0 позиции. Следовательно если слово идет с начала то функция вернет 0. Если делать сравнение не строгое (!=) то присходит приведение типов и следовательно 0 становится равный FALSE. Для того нужно применять строгое сравнение (!==). И если не ошибаюсь то в документации это говорится.
3. Webtest - 12 Сентября, 2014 - 11:10:38 - перейти к сообщению
RickMan, нет, в документации про точное сравнение с === FALSE.
4. RickMan - 12 Сентября, 2014 - 11:17:08 - перейти к сообщению
http://www.php.su/mb_strpos%28%29
Цитата:
mb_strpos() возвращает числовую позицию первого появления needle в строке haystack. Если needle не найдена, возвращает FALSE.
.....
Первая позиция равна 0. Позиция второго символа равна 1, и так далее.

Вы правы. Но неужели по этому выражению сложно понять что если вхождение есть то возврат не равен FALSE. И если считать что вернуть может 0, и что 0 == FALSE то можно прийти к тому что 0 !== FALSE.
5. Sail - 15 Сентября, 2014 - 13:04:04 - перейти к сообщению
Webtest пишет:
нет, в документации про точное сравнение с === FALSE

Не только!
Вот подробности про операторы сравнения и их работу с различными типами операндов.
6. esterio - 15 Сентября, 2014 - 16:04:38 - перейти к сообщению
http://php.net/manual/ru/function.strpos.php
Цитата:
Внимание

Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

 

Powered by ExBB FM 1.0 RC1