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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос на счет работы mb_strpos и FALSE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Webtest
Отправлено: 12 Сентября, 2014 - 10:52:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.

Просто интересно, но почему если я делаю проверку:
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. }

Все ли я правильно делаю?
 
 Top
RickMan
Отправлено: 12 Сентября, 2014 - 10:57:00
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




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


Делать надо так... Дело в том что в строке идексация эллементов идет с 0 позиции. Следовательно если слово идет с начала то функция вернет 0. Если делать сравнение не строгое (!=) то присходит приведение типов и следовательно 0 становится равный FALSE. Для того нужно применять строгое сравнение (!==). И если не ошибаюсь то в документации это говорится.
 
 Top
Webtest
Отправлено: 12 Сентября, 2014 - 11:10:38
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




RickMan, нет, в документации про точное сравнение с === FALSE.
 
 Top
RickMan
Отправлено: 12 Сентября, 2014 - 11:17:08
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




http://www.php.su/mb_strpos%28%29
Цитата:
mb_strpos() возвращает числовую позицию первого появления needle в строке haystack. Если needle не найдена, возвращает FALSE.
.....
Первая позиция равна 0. Позиция второго символа равна 1, и так далее.

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



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Webtest пишет:
нет, в документации про точное сравнение с === FALSE

Не только!
Вот подробности про операторы сравнения и их работу с различными типами операндов.
 
 Top
esterio
Отправлено: 15 Сентября, 2014 - 16:04:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




http://php.net/manual/ru/function.strpos.php
Цитата:
Внимание

Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB