ID:               27162
 Updated by:       [EMAIL PROTECTED]
 Reported By:      tomas dot matousek at matfyz dot cz
-Status:           Open
+Status:           Bogus
 Bug Type:         Arrays related
 Operating System: WinXP
 PHP Version:      4CVS, 5CVS
 New Comment:

There is no bug in this.



Previous Comments:
------------------------------------------------------------------------

[2004-02-06 14:11:01] tomas dot matousek at matfyz dot cz

"If the input arrays have the same string keys, then the values for
these keys are merged together into an array ..."
Of course that the values are merged. But the way in which are merged
is IMHO wrong. Keys are reindexed starting from 0 in the first level of
recursion but in the next levels reindexing is different. As one can
see on the output of an example above. Why?

------------------------------------------------------------------------

[2004-02-06 10:46:48] [EMAIL PROTECTED]

>From the manual:

"If the input arrays have the same string keys, then the values for
these keys are merged together into an array, and this is done
recursively, so that if one of the values is an array itself, the
function will merge it with a corresponding entry in another array too.
If, however, the arrays have the same numeric key, the later value will
not overwrite the original value, but will be appended."

------------------------------------------------------------------------

[2004-02-06 03:41:09] tomas dot matousek at matfyz dot cz

Maybe the example I used was not understood well.
I don't want indexing to be propagated thru array dimensions. IMHO
array_merge_recursive is indexing in two different ways depending of
the level of recursion. This is better example:

Reproduce code:
---------------

    $ar1 = array(10=>10, 7=>7);
    $ar2 = array(10=>10, 7=>7);

    print_r(array_merge_recursive($ar1, $ar2)); 

    $ar1 = array("a" => array(10=>10, 7=>7));
    $ar2 = array("a" => array(10=>10, 7=>7));

    print_r(array_merge_recursive($ar1, $ar2)); 

    $ar1 = array("a" => array("a" => array(10=>10, 7=>7)));
    $ar2 = array("a" => array("a" => array(10=>10, 7=>7)));

    print_r(array_merge_recursive($ar1, $ar2)); 


Actual result:
--------------

Array
(
    [0] => 10
    [1] => 7
    [2] => 10
    [3] => 7
)
Array
(
    [a] => Array
        (
            [10] => 10
            [7] => 7
            [11] => 10
            [12] => 7
        )

)
Array
(
    [a] => Array
        (
            [a] => Array
                (
                    [10] => 10
                    [7] => 7
                    [11] => 10
                    [12] => 7
                )

        )

)

Expected result is the same as above.

------------------------------------------------------------------------

[2004-02-05 21:48:16] [EMAIL PROTECTED]

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

This is to be expected. Indexing of any array always starts 
from element 0 and is not carried over across array 
dimensions. 

------------------------------------------------------------------------

[2004-02-05 14:49:07] tomas dot matousek at matfyz dot cz

Description:
------------
Function array_merge_recursive merges arrays recursivelly but the
behavior of merging is different in the first level from the next
ones.

Merging of arrays in the second and next levels starts key indexing
from the key of the first item merged but on the first level it starts
always from zero.

Maybe it is a feature but IMHO it would be better to implement the same
behavior on each level of a recursion.


Reproduce code:
---------------
    $ar1 = array(4=>4, 5=>5);
    $ar2 = array(4=>4, 5=>5);

    print_r(array_merge_recursive($ar1, $ar2)); 

    $ar1 = array("a" => array(4=>4, 5=>5));
    $ar2 = array("a" => array(4=>4, 5=>5));

    print_r(array_merge_recursive($ar1, $ar2)); 

    $ar1 = array("a" => array("a" => array(4=>4, 5=>5)));
    $ar2 = array("a" => array("a" => array(4=>4, 5=>5)));

    print_r(array_merge_recursive($ar1, $ar2)); 


Expected result:
----------------
Array
(
    [0] => 4
    [1] => 5
    [2] => 4
    [3] => 5
)
Array
(
    [a] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 4
            [3] => 5
        )

)
Array
(
    [a] => Array
        (
            [a] => Array
                (
                    [0] => 4
                    [1] => 5
                    [2] => 4
                    [3] => 5
                )

        )

)



Actual result:
--------------
Array
(
    [0] => 4
    [1] => 5
    [2] => 4
    [3] => 5
)
Array
(
    [a] => Array
        (
            [4] => 4
            [5] => 5
            [6] => 4
            [7] => 5
        )

)
Array
(
    [a] => Array
        (
            [a] => Array
                (
                    [4] => 4
                    [5] => 5
                    [6] => 4
                    [7] => 5
                )

        )

)




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=27162&edit=1

Reply via email to