ID:               30158
 User updated by:  a dot bendilas at zefxis dot gr
 Reported By:      a dot bendilas at zefxis dot gr
-Status:           Bogus
+Status:           Open
 Bug Type:         Strings related
 Operating System: WinXP SP2
 PHP Version:      4.3.8
 New Comment:

A note from the PHP manual on strstr:

If you only want to determine if a particular needle occurs within
haystack, use the faster and less memory intensive function strpos()
instead. 

A warning from the PHP manual on 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.

As for why I'm doing a check for true, it's because '0' evaluates to
false.

If my original string was 'time is money' then $position would be 0:

Reproduce code:
---------------
$string = 'time is money';
$srchstring = 'time';
$position = strpos($string, $srchstring);
echo 'String: '.$string.'<br />';
echo 'Search string: '.$srchstring.'<br />';
echo 'Position of search string: '.$position.'<br />';

if ((strpos($string, $srchstring) === true)) echo 'Search string is
included in the original string!'; else echo 'Search string is not
included in the original string!';


Expected result:
----------------
Search string is included in the original string!


Actual result:
--------------
String: time is money
Search string: time
Position of search string: 0
Search string is not included in the original string!


Previous Comments:
------------------------------------------------------------------------

[2004-09-20 00:18:56] [EMAIL PROTECTED]

Why are you doing a === to true?  strpos is clearly documented to
return a integer specifying the position in the string on a match or
false on a failure.  It will never return true.

------------------------------------------------------------------------

[2004-09-19 22:09:19] a dot bendilas at zefxis dot gr

Description:
------------
Although strpos returns the position of the needle correctly, when
testing the return value with a boolean operator to see if it's true,
it produces the opposite result.

Reproduce code:
---------------
$string = 'Once upon a time in America';
$srchstring = 'time';
$position = strpos($string, $srchstring);

echo 'String: '.$string.'<br />';
echo 'Search string: '.$srchstring.'<br />';
echo 'Position of search string: '.$position.'<br />';

if ((strpos($string, $srchstring) === true)) echo 'Search string is
included in the original string!'; else echo 'Search string is not
included in the original string!';


Expected result:
----------------
Search string is included in the original string!

Actual result:
--------------
Search string is not included in the original string!


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=30158&edit=1

Reply via email to