Edit report at https://bugs.php.net/bug.php?id=63833&edit=1

 ID:                 63833
 User updated by:    francois dot dambrine at isen-lille dot fr
 Reported by:        francois dot dambrine at isen-lille dot fr
-Summary:            udiff doesn't compare properly inside arrays
+Summary:            diff doesn't compare properly inside arrays
 Status:             Not a bug
 Type:               Bug
 Package:            Arrays related
 Operating System:   Windows
 PHP Version:        5.5.0alpha2
 Block user comment: N
 Private report:     N

 New Comment:

problem in the title


Previous Comments:
------------------------------------------------------------------------
[2012-12-22 13:30:18] francois dot dambrine at isen-lille dot fr

I know it is multidimensional array. My problem is that if I want to compute 
the 
difference between those thwo multidimentional arrays. 
For now I can use array_udiff to get only the subarray with "lable"=>"Label1X" 
and 
Label2X, I have to use array_udiff even if when I test $A[0] == $B[0] I get 
true.
So I was wondering if it was a bug or just a lack of precision in the 
documentation.
If it is a documentation problem, I can go to edit.php.net

------------------------------------------------------------------------
[2012-12-22 13:01:54] ras...@php.net

The documentation clearly states, "This function only checks one dimension of a 
n-dimensional array. Of course you can check deeper dimensions by using 
array_diff($array1[0], $array2[0]);."

Your example is using 2-dimensional arrays.

------------------------------------------------------------------------
[2012-12-22 12:38:38] francois dot dambrine at isen-lille dot fr

Description:
------------
This bug was introduced to me by a stackoverflow post 
http://stackoverflow.com/questions/13815287/union-two-associative-array-
php/13815578#13815578 I tested the behaviour with php 5.5 Alpha 2 and the "bug" 
is 
still there.

As of the documentation, it is said that array_diff uses an "internal function" 
to 
compare two elements.

As equality is the only thing that matters for array_diff I thought this 
internal 
function was something that "==" behind.

But even if two arrays are equal (same members) array_diff does not take it in 
account.

I mark it as a bug but it can only be a documentation problem.

Test script:
---------------
<?php 
$A = Array(
    array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    array(
            'lable' =>"label1",
            'id_poste'=>2,
            'id_part'=>12
            ),
    array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    array(
            'lable' =>"label3",
            'id_poste'=>4,
            'id_part'=>14
            )
);

$B = Array(
    array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    array(
            'lable' =>"label1_X",
            'id_poste'=>2,
            'id_part'=>12
            ),
    array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    array(
            'lable' =>"label3_X",
            'id_poste'=>4,
            'id_part'=>14
            )
);

var_dump(array_diff_assoc($B,$A));

Expected result:
----------------
Array(2){
    [0]=>array(3){
            ["lable"] =>"label1_X",
            ["id_poste"]=>2,
            ["id_part"]=>12
            },
    [1]=>array(3){
            ["lable"] =>"label3_X",
            ["id_poste"]=>4,
            ["id_part"]=>14
            }
}


Actual result:
--------------
array(0){
}


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



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

Reply via email to