Search code examples
phparraysmultidimensional-arrayarray-intersect

Using array_intersect on a multi-dimensional array


I have two arrays that both look like this:

Array
(
    [0] => Array
        (
            [name] => STRING
            [value] => STRING
        )

    [1] => Array
        (
            [name] => STRING
            [value] => STRING
        )

    [2] => Array
        (
            [name] => STRING
            [value] => STRING
        )
)

and I would like to be able to replicate array_intersect by comparing the ID of the sub arrays within the two master arrays. So far, I haven't been successful in my attempts. :(


Solution

  • Use array_uintersect() to use a custom comparison function, like this:

    $arr1 = array(
               array('name' => 'asdfjkl;', 'value' => 'foo'),
               array('name' => 'qwerty', 'value' => 'bar'),
               array('name' => 'uiop', 'value' => 'baz'),
            );
    
    $arr2 = array(
               array('name' => 'zxcv', 'value' => 'stuff'),
               array('name' => 'asdfjkl;', 'value' => 'foo'),
               array('name' => '12345', 'value' => 'junk'),
               array('name' => 'uiop', 'value' => 'baz'),
            );
    
    $intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
    print_r($intersect);
    
    function compareDeepValue($val1, $val2)
    {
       return strcmp($val1['value'], $val2['value']);
    }
    

    which yields, as you would hope:

    Array
    (
        [0] => Array
            (
                [name] => asdfjkl;
                [value] => foo
            )
    
        [2] => Array
            (
                [name] => uiop
                [value] => baz
            )
    
    )