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)