Search code examples
phpmultidimensional-arrayfilteringassociative-arrayarray-difference

Filter rows of a 2d array by the rows in another 2d array


I have two arrays, and I am using array_diff_assoc() to get the difference, but it always returns the common set row in the result

It should be returning the new q sets row. What's wrong with my approach?

Sample data:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
]

$array2 => [
    [11 => 'common set']
];

After calling array_diff_assoc($array1, $array2), my output is:

[
    [11 => 'common set']
]

Solution

  • Two values from key => value pairs are considered equal only if (string) $elem1 === (string) $elem2 . In other words a strict check takes place so the string representations must be the same.

    http://php.net/manual/en/function.array-diff-assoc.php

    The (string) value of any array is "Array". Thus, your call to array_diff_assoc is effectively comparing these two things:

    Array ( [0] => "Array" [1] => "Array" ) 
    Array ( [0] => "Array" ) 
    

    Since the thing that is different between those two is the [1] key/value pair from the first array, you get that back ([1] => Array( [11] => common set )).