#34834 [Bgs->Opn]: array_merge_recursive merges objects with arrays
ID: 34834
User updated by: tomas_matousek at hotmail dot com
Reported By: tomas_matousek at hotmail dot com
-Status: Bogus
+Status: Open
Bug Type: Arrays related
Operating System: WinXP
PHP Version: 5.1.0RC1
New Comment:
Why this is not a bug? Can you explain why this function should treat
objects like arrays (and merges their fields with items of arrays which
is weird) while another array functions doesn't do so? It is not stated
in the documentation.
Previous Comments:
------------------------------------------------------------------------
[2005-11-01 11:25:26] sniper@php.net
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
------------------------------------------------------------------------
[2005-10-11 23:35:21] tomas_matousek at hotmail dot com
Description:
------------
Although one cannot pass obejects to array_merge_recursive() function,
it looks like it doesn't ignore objects at all.
If objects are contained in the array it merges them as if they were
arrays of fields. I think it is not good to treat objects in this way
when other array functions doesn't do so (e.g. array_walk_recursive
doesn't step to fields of objects).
Reproduce code:
---------------
class A
{
var $field = array(1);
}
$a = new A;
$x = array("a" => $a);
$y = array("a" => array("field" => array(2)));
var_dump(array_merge_recursive($x,$y));
Expected result:
----------------
array(1) {
["a"]=>
array(2) {
[0]=>
object(A)#1 (1) {
["field"]=>
array(1) {
[0]=>
int(1)
}
}
["field"]=>
array(1) {
[0]=>
int(2)
}
}
}
Actual result:
--------------
array(1) {
["a"]=>
array(1) {
["field"]=>
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
}
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=34834&edit=1
Thread (5 messages)