проблема php: функция strpos не работает - PullRequest
5 голосов
/ 23 мая 2011

почему следующий php-код не работает:

$string = "123";
$search = "123";

if(strpos($string,$search))
{
    echo "found";
}else{
    echo "not found";
}

, так как $ search находится в $ string - не должен ли он быть запущен как найдено?

Ответы [ 7 ]

6 голосов
/ 23 мая 2011

Это упоминается в руководстве: strpos ()

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

В вашем случае строка находится по индексу 0 и в php 0 == false

Решение состоит в том, чтобы просто использовать строгий компаратор

echo strpos($string,$search) === false
     ? "not found"
     : "found";

Еще один

echo is_int(strpos($string,$search))
     ? "found"
     : "not found";

Или что-то ... допустим, интересно: D Просто для иллюстрации. Я не рекомендую этот.

echo strpos('_' . $string,$search) // we just shift the string 1 to the right
     ? "found"
     : "not found";
3 голосов
/ 23 мая 2011

Это происходит потому, что строка поиска находится в позиции 0. Попробуйте

if(strpos($string,$search) !== FALSE)

вместо

if(strpos($string,$search))

2 голосов
/ 23 мая 2011

С инструкция :

Эта функция может возвращать логическое значение ЛОЖЬ, но может также вернуть небулево значение, которое оценивается как ЛОЖЬ, например 0 или "". Пожалуйста, прочитайте раздел на Booleans для более Информация. Используйте оператор === для проверки возвращаемого значения этого функция.

В вашем примере вы должны использовать

$string = "123";
$search = "123";

if ( false !== strpos( $string, $search ) ) {
    echo "found";
} else {
    echo "not found";
}
2 голосов
/ 23 мая 2011

strpos возвращает первое смещение, где было найдено $search - 0. 0 в свою очередь оценивается как false. Поэтому, если не удается.

Если $search не был найден, strpos возвращает FALSE. Сначала проверьте возвращаемое значение для !== FALSE, а затем проверьте смещение.

Спасибо всем, кто указал на это в комментариях.

см .: http://php.net/manual/en/function.strpos.php

1 голос
/ 23 мая 2011

strpos возвращает числовую позицию строки, которую вы хотите найти, если найдет ее.Так что в вашем случае вы хотите сделать это вместо этого:

$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }

в основном он возвращает false, если не находит вашу строку

0 голосов
/ 23 мая 2011

Хорошо задокументированная проблема объяснена здесь . strpos просто возвращает '0'

0 голосов
/ 23 мая 2011

Вы можете использовать это:

<?php

$string = "123";

$find = "123";

$strpos = strpos($string, $find);

if($strpos || $strpos === (int)0) {
    echo "Found it!";
} else {
    echo "Not Found!";
}

?>
...