php problem: strpos function not working

好久不见. 提交于 2020-01-20 08:08:48

问题


why is the following php code not working:

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

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

as $search is in $string - shouldn't it be triggered as found?


回答1:


This is mentioned in the Manual: strpos()

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

In your case the string is found at the index 0 and in php 0 == false

The solution is to just use the strict comparator

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

Another one

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

Or something ... lets say interesting :D Just for illustration. I don't recommend this one.

echo strpos('_' . $string,$search) // we just shift the string 1 to the right
     ? "found"
     : "not found";



回答2:


This is happening because the search string is being found at position 0. Try

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

instead of

if(strpos($string,$search))




回答3:


strpos returns the first offset where $search was found - 0. 0 in turn evaluates to false. Therefore the if fails.

If $search was not found, strpos returns FALSE. First check the return value for !== FALSE, and then check the offset.

Thanks to everyone who pointed this out in the comments.

see: http://php.net/manual/en/function.strpos.php




回答4:


From the manual:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

In your example, you should use

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

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



回答5:


strpos returns the numeric position of the string you want to search for if it finds it. So in your case, you want to be doing this instead:

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

basically it returns a false if it doesn't find your string




回答6:


You can use this:

<?php

$string = "123";

$find = "123";

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

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

?>



回答7:


Well documented issue explained here. strpos is simply returning '0'



来源:https://stackoverflow.com/questions/6099309/php-problem-strpos-function-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!