Req->Bug #72866 [Opn->Nab]: in_array confusing strings and integers
| From: | cmb@php.net | Date: | Wed, 17 Aug 2016 15:34:18 +0000 |
| Subject: | Req->Bug #72866 [Opn->Nab]: in_array confusing strings and integers | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-203355@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72866&edit=1
ID: 72866
Updated by: cmb@php.net
Reported by: imbibinebe at gmail dot com
Summary: in_array confusing strings and integers
-Status: Open
+Status: Not a bug
-Type: Feature/Change Request
+Type: Bug
Package: *General Issues
Operating System: debian
PHP Version: 5.6Git-2016-08-17 (Git)
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
The manual states[1]:
| If you compare a number with a string or the comparison involves
| numerical strings, then each string is converted to a number and
| the comparison performed numerically.
And[2]:
| The value is given by the initial portion of the string. If the
| string starts with valid numeric data, this will be the value
| used. Otherwise, the value will be 0 (zero).
[1] <http://php.net/manual/en/language.operators.comparison.php>
[2] <http://php.net/manual/en/language.types.string.php#language.types.string.conversion>
Previous Comments:
------------------------------------------------------------------------
[2016-08-17 14:32:21] imbibinebe at gmail dot com
And at least, the final result resulting of my test is:
// 'string' == 0 -> bool(true)
should that be allright ? :)
------------------------------------------------------------------------
[2016-08-17 14:27:24] ryosuke_i_628 at yahoo dot co dot jp
Sorry, I was missing your important sentence:
> 'Expected result' should be obtained without using the third parameter of in_array
BTW, I think this behavior seems to be a little odd, too...
Probably you know the related issue; array_unique() was broken at PHP 5.2.9 due to use SORT_REGULAR
by default, which feature is reverted at PHP 5.2.10 to use SORT_STRING.
------------------------------------------------------------------------
[2016-08-17 14:21:19] ryosuke_i_628 at yahoo dot co dot jp
This is VERY WELL-KNOWN feature of PHP, not a bug.
Just pass true as 3rd argument. (default is false)
Read documentation: http://php.net/manual/en/function.in-array.php
<?php
$needle = 's';
$elements = [1];
var_dump(in_array($needle, $elements, false)); // 's' == 1 -> bool(true)
var_dump(in_array($needle, $elements, true)); // 's' === 1 -> bool(false)
------------------------------------------------------------------------
[2016-08-17 14:02:53] imbibinebe at gmail dot com
Description:
------------
using PHP Version 5.6.14-0+deb8u1 on a debian operating system, here is what I get with the
following testing script.
I think that 'Expected result' should be obtained without using the third parameter of
in_array ([, bool $strict = FALSE ]) otherwise it is very confusing.
Test script:
---------------
echo 'test1:'.(in_array('string',[0,1])?'true':'false');
echo 'test2:'.(in_array('string',[1])?'true':'false');
echo 'test3:'.(in_array('string',[0])?'true':'false');
Expected result:
----------------
test1:false
test2:false
test3:false
Actual result:
--------------
test1:true
test2:false
test3:true
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72866&edit=1