Using array_intersect on a multi-dimensional array Using array_intersect on a multi-dimensional array arrays arrays

Using array_intersect on a multi-dimensional array


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        ))


function compareDeepValue($val1, $val2){   return strcmp($val1['value'], $val2['value']);}

Be sure that val2 key is existing in val1 array, because the function is ordering array first. Very strange.


you can use embedded function with array_uintersect php function. ex:

$intersectNames = array_uintersect($arr1, $arr2, function ($val1, $val2){    return strcmp($val1['name'], $val2['name']);    });$intersectValues = array_uintersect($arr1, $arr2, function ($val1, $val2){    return strcmp($val1['value'], $val2['value']);    });print_r('namesIntersected' => $intersectNames, 'valuesIntersected' => $intersectValues)