Странное поведение strpos и & Oslash; [Дубликат]

0

Мне это кажется странным, но, возможно, простое объяснение.

Почему следующий блок кода приводит к false несмотря на то, что игла определенно является частью стога сена?

if(strpos("Ø25xØ2", "Ø")){
    echo "true";
} else {
    echo "false";
}
Теги:
strpos

2 ответа

3
Лучший ответ

strpos находит эту строку со смещением 0, которое оценивается как false. Чтобы действительно определить, не найден ли он, вам нужно явно проверить тип и значение с помощью операторов === или !==, например:

if (strpos("Ø25xØ2", "Ø") !== false) {
    echo "true";
} else {
    echo "false";
}

Это также хорошо освещено в руководстве.

  • 1
    Пятно-на! Хороший, я приму ваш ответ, как только сайт позволит мне. Спасибо :)
  • 0
    Теперь, когда вы это сказали, это имеет смысл. Я не знаю, почему я не подумал об этом. Думаю, нужно больше кофе.
0

strpos вернет 0 если игла находится в самом начале стога сена. Но 0 вычисляет значение boolean false, поэтому условие if не выполняется.

Вам нужно сравнить с false, что является возвращаемым значением, если игла не найдена вообще:

if (false !== strpos("Ø25xØ2", "Ø")) {
    echo "true";
} else {
    echo "false";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню