php problem: strpos function not working

前端 未结 7 1451
鱼传尺愫
鱼传尺愫 2020-12-21 00:14

why is the following php code not working:

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

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


        
相关标签:
7条回答
  • 2020-12-21 00:39

    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

    0 讨论(0)
  • 2020-12-21 00:42

    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!";
    }
    
    ?>
    
    0 讨论(0)
  • 2020-12-21 00:48

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

    0 讨论(0)
  • 2020-12-21 00:54

    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";
    
    0 讨论(0)
  • 2020-12-21 00:55

    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))

    0 讨论(0)
  • 2020-12-21 00:55

    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";
    }
    
    0 讨论(0)
提交回复
热议问题