在多维数组上使用array_intersect

| 我有两个看起来都像这样的数组:
Array
(
    [0] => Array
        (
            [name] => STRING
            [value] => STRING
        )

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

    [2] => Array
        (
            [name] => STRING
            [value] => STRING
        )
)
而且我希望能够通过比较两个主阵列中子阵列的ID来复制array_intersect。到目前为止,我的尝试还没有成功。 :(     
已邀请:
使用ѭ1来使用自定义比较功能,如下所示:
$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\']);
}
正如您所希望的那样:
Array
(
    [0] => Array
        (
            [name] => asdfjkl;
            [value] => foo
        )

    [2] => Array
        (
            [name] => uiop
            [value] => baz
        )

)
    
function compareDeepValue($val1, $val2)
{
   return strcmp($val1[\'value\'], $val2[\'value\']);
}
确保val2密钥存在于val1数组中,因为该函数首先对数组进行排序。很奇怪。     
您可以将内嵌函数与array_uintersect php函数一起使用。例如:
$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)
    

要回复问题请先登录注册