#46283 [Opn->Fbk]: array_merge_recursive() Warning recursion detected in...

From: Date: Wed, 26 Nov 2008 02:41:32 +0000
Subject: #46283 [Opn->Fbk]: array_merge_recursive() Warning recursion detected in...
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-131332@lists.php.net to get a copy of this message
ID: 46283 Updated by: lbarnaud@php.net Reported By: name at email dot com -Status: Open +Status: Feedback Bug Type: Arrays related Operating System: * PHP Version: 5CVS-2008-11-17 New Comment: I can't reproduce with 5.3CVS (no warnings). The weird output is caused by two null bytes and the class name added to private properties. You get the same output when casting a class to an array. Previous Comments: ------------------------------------------------------------------------ [2008-11-17 13:42:33] name at email dot com @jani PHP Version 5.2.7RC4-dev Build Date Nov 17 2008 11:39:11 array(1) { ["name"]=> array(1) { ["�A�variable"]=> array(2) { [0]=> string(3) "foo" [1]=> string(3) "foo" } } } ------------------------------------------------------------------------ [2008-11-12 13:10:31] jani@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://windows.php.net/snapshots/ ------------------------------------------------------------------------ [2008-10-29 15:18:38] name at email dot com @jani 1. passing two arrays. 2. they both contain a reference to an object. 3. i expect the function to preserve the structure of the object. 4. notice: ["�A�variable"] <-- whats that? ------------------------------------------------------------------------ [2008-10-26 19:19:46] jani@php.net What's the problem here? You're passing an object to a function expecting arrays and think it will work..? ------------------------------------------------------------------------ [2008-10-12 22:14:15] name at email dot com Description: ------------ Calling array_merge_recursive() produces an unclear warning ("recursion detected in"...) and seems to be breaking the script. The above happens if two conditions are met: 1. there is a private/protected data member in the object (see code). 2. the merged arrays contain at least one same string as key. * please note: following code reproduces this problem on the latest snaps of both 5.2.6 and 5.3 Reproduce code: --------------- class A { private $variable; public function __construct() { $this->variable = 'foo'; } } $x = new A; $b = array_merge_recursive(array("name"=>$x),array("name"=>$x)); var_dump($b); Expected result: ---------------- see 'Actual result' below... Actual result: -------------- array(1) { ["name"]=> array(1) { ["�A�variable"]=> array(2) { [0]=> string(3) "foo" [1]=> string(3) "foo" } } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46283&edit=1

« previous php.bugs (#131332) next »