#20681 [Opn]: array_search(:object, :array) fails

From: Date: Wed, 27 Nov 2002 20:31:46 +0000
Subject: #20681 [Opn]: array_search(:object, :array) fails
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-25994@lists.php.net to get a copy of this message
ID: 20681 User updated by: dparks@verinform.com Reported By: dparks@verinform.com Status: Open Bug Type: Feature/Change Request Operating System: Win 2K SP3 PHP Version: 4.2.3 New Comment: I don't understand what this has to do with how equality is handled by the Zend engine. The documentation states that array_search can accept "mixed" data in the first parameter, which would seem to imply that objects should work. They don't. Therefore, array_search() is broken. What am I missing? Also, I have seen no mention in the PHP manual about how equality is handled by the Zend engine. Should I file a documentation bug? Thanks, Daniel Previous Comments: ------------------------------------------------------------------------ [2002-11-27 14:08:01] moriyoshi@php.net As it's been said enough that identity or equalness of two objects is somewhat obscure in ZendEngine1, I don't see any reason to implement this feature unless ZendEngine2 becomes ready for release versions. So I'm reclassifying this report as a feature request in this point of view. ------------------------------------------------------------------------ [2002-11-27 11:48:56] dparks@verinform.com <?php class A { function A () { } } class B { function B () { } } $g_b = new B (); $g_array = array ( array ( new A () ), array ( 'test' ), array ( $g_b ) ); $g_key = array_search(array ( new A () ), $g_array); var_dump($g_key); $g_key = array_search(array ( $g_b ), $g_array); var_dump($g_key); $g_key = array_search(array ( 'test' ), $g_array); var_dump($g_key); ?> Seems to work as I exect it to: int(0) int(2) int(1) Also, the original example still produces warnings and doesn't find the elements if you change the array_search() calls to in_array(). ------------------------------------------------------------------------ [2002-11-27 11:41:45] dparks@verinform.com array_search() does not seem to work when the needle is an object. Sample code: <?php class A { function A () { } } class B { function B () { } } $g_b = new B (); $g_array = array ( new A (), 'test', $g_b ); $g_key = array_search(new A (), $g_array); var_dump($g_key); $g_key = array_search($g_b, $g_array); var_dump($g_key); $g_key = array_search('test', $g_array); var_dump($g_key); ?> Output: <br /> <b>Warning</b>: Wrong datatype for first argument in call to array_search in <b>C:\dparks\Documents\html\tmp.php</b> on line <b>17</b><br /> bool(false) <br /> <b>Warning</b>: Wrong datatype for first argument in call to array_search in <b>C:\dparks\Documents\html\tmp.php</b> on line <b>20</b><br /> bool(false) int(1) Environment: This is PHP 4.2.3 (binary from Zend or PHP.net) running on Apache 2.0.40 on Win 2K SP3. Please email me if you would like me to run more tests, or try another build (it may be awhile before I can try another build though -- someone else here had trouble with 4.3rc1 and I am behind schedule). Thanks, Daniel ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=20681&edit=1

« previous php.bugs (#25994) next »