|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-10-11 23:35 UTC] 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)
}
}
}
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 17:00:02 2025 UTC |
You get even more interesting result using datetime. Code: ------- <?php $old = ['created' => new \DateTime()]; $new = ['created' => new \DateTime('+1 minute')]; $changeset = array_merge_recursive($old, $new); var_dump($changeset); Expected: --------- array(1) { ["created"]=> array(2) { [0] => object(DateTime)#1 (3) { ["date"]=> string(26) "2015-11-04 10:36:03.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" }, [1] => object(DateTime)#1 (3) { ["date"]=> string(26) "2015-11-04 10:37:03.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" } } } Actual ------- array(1) { ["created"]=> array(3) { ["date"]=> array(2) { [0]=> string(26) "2015-11-04 10:36:03.000000" [1]=> string(26) "2015-11-04 10:37:03.000000" } ["timezone_type"]=> array(2) { [0]=> int(3) [1]=> int(3) } ["timezone"]=> array(2) { [0]=> string(16) "Europe/Amsterdam" [1]=> string(16) "Europe/Amsterdam" } } } So that treats DateTime as array.